Trait scala.reflect.api.Internals.Importer
trait Importer extends AnyRef
Abstract Value Members
abstract val from: Universe
The source universe of reflection artifacts that will be processed. The target universe is universe that created this importer with mkImporter
.
abstract def importPosition(pos: Universe.Position): Universe.Position
abstract def importSymbol(sym: Universe.Symbol): Universe.Symbol
In the current universe, locates or creates a symbol that corresponds to the provided symbol in the source universe. If necessary imports the owner chain, companions, type signature, annotations and attachments.
abstract def importTree(tree: Universe.Tree): Universe.Tree
In the current universe, creates a tree that corresponds to the provided tree in the source universe. If necessary imports the underlying symbols, types and attachments.
abstract def importType(tpe: Universe.Type): Universe.Type
In the current universe, locates or creates a type that corresponds to the provided type in the source universe. If necessary imports the underlying symbols, annotations, scopes and trees.
abstract val reverse: Universe.Importer { val from: Internals.this.type }
Concrete Value Members
final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
final def ##(): Int
- Definition Classes
- AnyRef → Any
def +(other: String): String
- Implicit
- This member is added by an implicit conversion from Universe.Importer to any2stringadd[Universe.Importer] performed by method any2stringadd in scala.Predef.
- Definition Classes
- any2stringadd
def ->[B](y: B): (Universe.Importer, B)
- Implicit
- This member is added by an implicit conversion from Universe.Importer to ArrowAssoc[Universe.Importer] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
- Annotations
- @inline()
final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
final def asInstanceOf[T0]: T0
- Definition Classes
- Any
def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
def ensuring(cond: (Universe.Importer) ⇒ Boolean, msg: ⇒ Any): Universe.Importer
- Implicit
- This member is added by an implicit conversion from Universe.Importer to Ensuring[Universe.Importer] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: (Universe.Importer) ⇒ Boolean): Universe.Importer
- Implicit
- This member is added by an implicit conversion from Universe.Importer to Ensuring[Universe.Importer] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean, msg: ⇒ Any): Universe.Importer
- Implicit
- This member is added by an implicit conversion from Universe.Importer to Ensuring[Universe.Importer] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
def ensuring(cond: Boolean): Universe.Importer
- Implicit
- This member is added by an implicit conversion from Universe.Importer to Ensuring[Universe.Importer] performed by method Ensuring in scala.Predef.
- Definition Classes
- Ensuring
final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
def equals(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
def formatted(fmtstr: String): String
- Implicit
- This member is added by an implicit conversion from Universe.Importer to StringFormat[Universe.Importer] performed by method StringFormat in scala.Predef.
- Definition Classes
- StringFormat
- Annotations
- @inline()
final def getClass(): Class[_]
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native()
final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native()
final def synchronized[T0](arg0: ⇒ T0): T0
- Definition Classes
- AnyRef
def toString(): String
- Definition Classes
- AnyRef → Any
final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws( ... ) @native()
def →[B](y: B): (Universe.Importer, B)
- Implicit
- This member is added by an implicit conversion from Universe.Importer to ArrowAssoc[Universe.Importer] performed by method ArrowAssoc in scala.Predef.
- Definition Classes
- ArrowAssoc
© 2002-2019 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
https://www.scala-lang.org/api/2.12.9/scala-reflect/scala/reflect/api/Internals$Importer.html
This trait provides support for importers, a facility to migrate reflection artifacts between universes. Note: this trait should typically be used only rarely.
Reflection artifacts, such as Symbols and Types, are contained in Universes. Typically all processing happens within a single
Universe
(e.g. a compile-time macroUniverse
or a runtime reflectionUniverse
), but sometimes there is a need to migrate artifacts from oneUniverse
to another. For example, runtime compilation works by importing runtime reflection trees into a runtime compiler universe, compiling the importees and exporting the result back.Reflection artifacts are firmly grounded in their
Universe
s, which is reflected by the fact that types of artifacts from different universes are not compatible. By usingImporter
s, however, they be imported from one universe into another. For example, to importfoo.bar.Baz
from the sourceUniverse
to the targetUniverse
, an importer will first check whether the entire owner chain exists in the targetUniverse
. If it does, then nothing else will be done. Otherwise, the importer will recreate the entire owner chain and will import the corresponding type signatures into the targetUniverse
.Since importers match
Symbol
tables of the source and the targetUniverse
s using plain string names, it is programmer's responsibility to make sure that imports don't distort semantics, e.g., thatfoo.bar.Baz
in the sourceUniverse
means the same thatfoo.bar.Baz
does in the targetUniverse
.Example
Here's how one might implement a macro that performs compile-time evaluation of its argument by using a runtime compiler to compile and evaluate a tree that belongs to a compile-time compiler: