Трейт scala.reflect.api.Printers
трейт Printers extends AnyRef
Члены типа
служебный классBooleanFlag(value: Option[Boolean]) extends Product с Serializable
трейтTreePrinter extends AnyRef
- Атрибуты
- защищенный
Абстрактные члены значения
абстрактный defnewCodePrinter(out: PrintWriter, tree: Universe.Tree, printRootPkg: Boolean): Universe.TreePrinter
Способ определить, что showCode(...) означает.
- Атрибуты
- защищенный
абстрактный defnewRawTreePrinter(out: PrintWriter): Universe.TreePrinter
Способ определить, что showRaw(...) означает.
- Атрибуты
- защищенный
абстрактный defnewTreePrinter(out: PrintWriter): Universe.TreePrinter
Способ определить, что show(...) означает.
- Атрибуты
- защищенный
абстрактный defshow(position: Universe.Position): String
абстрактный defshow(flags: Universe.FlagSet): String
абстрактный defshow(name: Universe.Name): String
абстрактный defshowDecl(sym: Universe.Symbol): String
Члены-значения конкретного типа
final def !=(arg0: Any): Boolean
- Определяющие классы
- AnyRef → Any
final def ##(): Int
- Определяющие классы
- AnyRef → Any
def +(other: String): String
def ->[B](y: B): (Printers, B)
final def ==(arg0: Any): Boolean
- Определяющие классы
- AnyRef → Any
final def asInstanceOf[T0]: T0
- Определяющие классы
- Any
def clone(): AnyRef
- Атрибуты
- protected[java.lang]
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.CloneNotSupportedException]) @native()
def ensuring(cond: (Printers) => Boolean, msg: => Any): Printers
def ensuring(cond: (Printers) => Boolean): Printers
def ensuring(cond: Boolean, msg: => Any): Printers
def ensuring(cond: Boolean): Printers
final def eq(arg0: AnyRef): Boolean
- Определяющие классы
- AnyRef
def equals(arg0: AnyRef): Boolean
- Определяющие классы
- AnyRef → Any
def finalize(): Unit
- Атрибуты
- protected[java.lang]
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.Throwable])
def formatted(fmtstr: String): String
final def getClass(): Class[_ <: AnyRef]
- Классы-определения
- AnyRef → Any
- Аннотации
- @native()
def hashCode(): Int
- Классы-определения
- AnyRef → Any
- Аннотации
- @native()
final def isInstanceOf[T0]: Boolean
- Классы-определения
- Any
final def ne(arg0: AnyRef): Boolean
- Классы-определения
- AnyRef
final def notify(): Unit
- Классы-определения
- AnyRef
- Аннотации
- @native()
final def notifyAll(): Unit
- Классы-определения
- AnyRef
- Аннотации
- @native()
def render(what: Any, mkPrinter: (PrintWriter) => Universe.TreePrinter, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String
- Атрибуты
- protected
def show(any: Any, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String
def showCode(tree: Universe.Tree, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None, printRootPkg: Boolean = false): String
Отображает код переданного дерева таким образом, чтобы: 1) его можно было позже скомпилировать с помощью scalac, сохраняя то же значение, 2) он выглядел красиво. #1 доступен для деревьев без атрибутов и деревьев с атрибутами #2 более или менее имеет правильный отступ, но в данный момент там много оставленной десугаризации, и это то, что мы планируем улучшить в будущем. Опции printTypes, printIds, printPositions имеют то же значение, что и для TreePrinter. Опция printRootPkg доступна только для атрибутированных деревьев.
def showRaw(position: Universe.Position): String
def showRaw(flags: Universe.FlagSet): String
def showRaw(name: Universe.Name): String
def showRaw(any: Any, printTypes: Universe.BooleanFlag = None, printIds: Universe.BooleanFlag = None, printOwners: Universe.BooleanFlag = None, printKinds: Universe.BooleanFlag = None, printMirrors: Universe.BooleanFlag = None, printPositions: Universe.BooleanFlag = None): String
final def synchronized[T0](arg0: => T0): T0
- Определяющие классы
- AnyRef
def toString(): String
- Определяющие классы
- AnyRef → Any
def treeToString(tree: Universe.Tree): String
По умолчанию деревья печатаются с show
- Атрибуты
- protected
final def wait(): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long, arg1: Int): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException])
final def wait(arg0: Long): Unit
- Определяющие классы
- AnyRef
- Аннотации
- @throws(classOf[java.lang.InterruptedException]) @native()
object BooleanFlag extends java.io.Serializable
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.13.0/scala-reflect/scala/reflect/api/Printers.html
ЭКСПЕРИМЕНТАЛЬНО
Утилиты для красивой печати scala.reflect.api.Trees и scala.reflect.api.Types.
Печать деревьев
Метод
showотображает "форматированное" представление отражаемых артефактов. Это представление предоставляет десугаризованное Java-представление кода Scala. Например:scala> import scala.reflect.runtime.universe._ import scala.reflect.runtime.universe._ scala> def tree = reify{ final class C { def x = 2 } }.tree tree: reflect.runtime.universe.Tree scala> show(tree) res0: String = { final class C extends AnyRef { def <init>() = { super.<init>(); () }; def x = 2 }; () }Метод
showRawотображает внутреннюю структуру данного объекта рефлексии в виде абстрактного синтаксического дерева (AST) Scala, на котором работает Scala-типизатор.Обратите внимание, что, хотя это представление, похоже, генерирует правильные деревья, которые, как можно подумать, можно использовать в реализации макроса, это обычно не так. Символы не полностью представлены (представлены только их имена). Таким образом, этот метод лучше всего подходит для простого просмотра AST, заданных некоторым валидным кодом Scala.
scala> showRaw(tree) res1: String = Block(List( ClassDef(Modifiers(FINAL), TypeName("C"), List(), Template( List(Ident(TypeName("AnyRef"))), noSelfType, List( DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(), Block(List( Apply(Select(Super(This(tpnme.EMPTY), tpnme.EMPTY), nme.CONSTRUCTOR), List())), Literal(Constant(())))), DefDef(Modifiers(), TermName("x"), List(), List(), TypeTree(), Literal(Constant(2))))))), Literal(Constant(())))Метод
showRawтакже может печатать scala.reflect.api.Types рядом с проверяемыми артефактами.scala> import scala.tools.reflect.ToolBox // requires scala-compiler.jar import scala.tools.reflect.ToolBox scala> import scala.reflect.runtime.{currentMirror => cm} import scala.reflect.runtime.{currentMirror=>cm} scala> showRaw(cm.mkToolBox().typecheck(tree), printTypes = true) res2: String = Block[1](List( ClassDef[2](Modifiers(FINAL), TypeName("C"), List(), Template[3]( List(Ident[4](TypeName("AnyRef"))), noSelfType, List( DefDef[2](Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree[3](), Block[1](List( Apply[4](Select[5](Super[6](This[3](TypeName("C")), tpnme.EMPTY), ...))), Literal[1](Constant(())))), DefDef[2](Modifiers(), TermName("x"), List(), List(), TypeTree[7](), Literal[8](Constant(2))))))), Literal[1](Constant(()))) [1] TypeRef(ThisType(scala), scala.Unit, List()) [2] NoType [3] TypeRef(NoPrefix, TypeName("C"), List()) [4] TypeRef(ThisType(java.lang), java.lang.Object, List()) [5] MethodType(List(), TypeRef(ThisType(java.lang), java.lang.Object, List())) [6] SuperType(ThisType(TypeName("C")), TypeRef(... java.lang.Object ...)) [7] TypeRef(ThisType(scala), scala.Int, List()) [8] ConstantType(Constant(2))Печать типов
Метод
showscala> import scala.reflect.runtime.universe._ import scala.reflect.runtime.universe._ scala> def tpe = typeOf[{ def x: Int; val y: List[Int] }] tpe: reflect.runtime.universe.Type scala> show(tpe) res0: String = scala.AnyRef{def x: Int; val y: scala.List[Int]}Как и метод
showRawдля scala.reflect.api.Trees,showRawдля scala.reflect.api.Types предоставляет визуализацию Scala AST, над которой работает Scala-типизатор.// showRaw has already been discussed above scala> showRaw(tpe) res1: String = RefinedType( List(TypeRef(ThisType(scala), TypeName("AnyRef"), List())), Scope( TermName("x"), TermName("y")))printIdsи/илиprintKindsмогут дополнительно быть переданы в качестве аргументов в вызовеshowRaw, который дополнительно отображает уникальные идентификаторы символов.scala> showRaw(tpe, printIds = true, printKinds = true) res2: String = RefinedType( List(TypeRef(ThisType(scala#2043#PK), TypeName("AnyRef")#691#TPE, List())), Scope( TermName("x")#2540#METH, TermName("y")#2541#GET))Для получения более подробной информации о
Printerи других аспектах рефлексии Scala, см. Руководство по рефлексии