trait Internals extends AnyRef
EXPERIMENTAL
This trait assembles APIs occasionally necessary for performing low-level operations on reflection artifacts. See Internals#InternalApi for more information about nature, usefulness and compatibility guarantees of these APIs.
- Self Type
- Universe
- Source
- Internals.scala
- Grouped
- Alphabetic
- By Inheritance
- Internals
- AnyRef
- Any
- by any2stringadd
- by StringFormat
- by Ensuring
- by ArrowAssoc
- Hide All
- Show All
- Public
- All
Type Members
- 
      
      
      
        
      
    
      
        abstract 
        type
      
      
        Compat <: Universe.CompatApi
      
      
      - See also
 
- 
      
      
      
        
      
    
      
        
        trait
      
      
        
              CompatApi
             extends AnyRef
      
      
      - See also
 
- 
      
      
      
        
      
    
      
        
        class
      
      
        
              CompatToken
             extends AnyRef
      
      
      Presence of an implicit value of this type in scope indicates that source compatibility with Scala 2.10 has been enabled. Presence of an implicit value of this type in scope indicates that source compatibility with Scala 2.10 has been enabled. - Annotations
- @implicitNotFound( ... )
 
- 
      
      
      
        
      
    
      
        abstract 
        type
      
      
        
              FreeTermSymbol
             >: Null <: Universe.FreeTermSymbolApi with Universe.TermSymbol
      
      
      The type of free terms introduced by reification. 
- 
      
      
      
        
      
    
      
        
        trait
      
      
        
              FreeTermSymbolApi
             extends Universe.TermSymbolApi
      
      
      The API of free term symbols. The API of free term symbols. The main source of information about symbols is the Symbols page. $SYMACCESSORS 
- 
      
      
      
        
      
    
      
        abstract 
        type
      
      
        
              FreeTypeSymbol
             >: Null <: Universe.FreeTypeSymbolApi with Universe.TypeSymbol
      
      
      The type of free types introduced by reification. 
- 
      
      
      
        
      
    
      
        
        trait
      
      
        
              FreeTypeSymbolApi
             extends Universe.TypeSymbolApi
      
      
      The API of free type symbols. The API of free type symbols. The main source of information about symbols is the Symbols page. $SYMACCESSORS 
- 
      
      
      
        
      
    
      
        
        trait
      
      
        
              Importer
             extends AnyRef
      
      
      This trait provides support for importers, a facility to migrate reflection artifacts between universes. 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 macroUniverseor a runtime reflectionUniverse), but sometimes there is a need to migrate artifacts from oneUniverseto 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 Universes, which is reflected by the fact that types of artifacts from different universes are not compatible. By usingImporters, however, they be imported from one universe into another. For example, to importfoo.bar.Bazfrom the sourceUniverseto 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 Symboltables of the source and the targetUniverses using plain string names, it is programmer's responsibility to make sure that imports don't distort semantics, e.g., thatfoo.bar.Bazin the sourceUniversemeans the same thatfoo.bar.Bazdoes in the targetUniverse.ExampleHere'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: def staticEval[T](x: T) = macro staticEval[T] def staticEval[T](c: scala.reflect.macros.blackbox.Context)(x: c.Expr[T]) = { // creates a runtime reflection universe to host runtime compilation import scala.reflect.runtime.{universe => ru} val mirror = ru.runtimeMirror(c.libraryClassLoader) import scala.tools.reflect.ToolBox val toolBox = mirror.mkToolBox() // runtime reflection universe and compile-time macro universe are different // therefore an importer is needed to bridge them // currently mkImporter requires a cast to correctly assign the path-dependent types val importer0 = ru.internal.mkImporter(c.universe) val importer = importer0.asInstanceOf[ru.internal.Importer { val from: c.universe.type }] // the created importer is used to turn a compiler tree into a runtime compiler tree // both compilers use the same classpath, so semantics remains intact val imported = importer.importTree(tree) // after the tree is imported, it can be evaluated as usual val tree = toolBox.untypecheck(imported.duplicate) val valueOfX = toolBox.eval(imported).asInstanceOf[T] ... } 
- 
      
      
      
        
      
    
      
        abstract 
        type
      
      
        Internal <: Universe.InternalApi
      
      
      - See also
 
- 
      
      
      
        
      
    
      
        
        trait
      
      
        
              InternalApi
             extends AnyRef
      
      
      Reflection API exhibits a tension inherent to experimental things: on the one hand we want it to grow into a beautiful and robust API, but on the other hand we have to deal with immaturity of underlying mechanisms by providing not very pretty solutions to enable important use cases. Reflection API exhibits a tension inherent to experimental things: on the one hand we want it to grow into a beautiful and robust API, but on the other hand we have to deal with immaturity of underlying mechanisms by providing not very pretty solutions to enable important use cases. In Scala 2.10, which was our first stab at reflection API, we didn't have a systematic approach to dealing with this tension, sometimes exposing too much of internals (e.g. Symbol.deSkolemize) and sometimes exposing too little (e.g. there's still no facility to change owners, to do typing transformations, etc). This resulted in certain confusion with some internal APIs living among public ones, scaring the newcomers, and some internal APIs only available via casting, which requires intimate knowledge of the compiler and breaks compatibility guarantees. This led to creation of the internalAPI module for the reflection API, which provides advanced APIs necessary for macros that push boundaries of the state of the art, clearly demarcating them from the more or less straightforward rest and providing compatibility guarantees on par with the rest of the reflection API (full compatibility within minor releases, best effort towards backward compatibility within major releases, clear replacement path in case of rare incompatible changes in major releases).The internalmodule itself (the value that implements InternalApi) isn't defined here, in scala.reflect.api.Universe, but is provided on per-implementation basis. Runtime API endpoint (scala.reflect.runtime.universe) providesuniverse.compat: InternalApi, whereas compile-time API endpoints (instances of scala.reflect.macros.Context) providec.compat: ContextInternalApi, which extendsInternalApiwith additional universe-specific and context-specific functionality.
- 
      
      
      
        
      
    
      
        abstract 
        type
      
      
        
              ReferenceToBoxed
             >: Null <: Universe.ReferenceToBoxedApi with Universe.TermTree
      
      
      Marks underlying reference to id as boxed. Marks underlying reference to id as boxed. Precondition:<\b> id must refer to a captured variable A reference such marked will refer to the boxed entity, no dereferencing with `.elem` is done on it. This tree node can be emitted by macros such as reify that call referenceCapturedVariable. It is eliminated in LambdaLift, where the boxing conversion takes place. 
- 
      
      
      
        
      
    
      
        
        trait
      
      
        
              ReferenceToBoxedApi
             extends Universe.TermTreeApi
      
      
      The API that all references support 
- 
      
      
      
        
      
    
      
        abstract 
        class
      
      
        
              ReferenceToBoxedExtractor
             extends AnyRef
      
      
      An extractor class to create and pattern match with syntax ReferenceToBoxed(ident).An extractor class to create and pattern match with syntax ReferenceToBoxed(ident). This AST node does not have direct correspondence to Scala code, and is emitted by macros to reference capture vars directly without going throughelem.For example: var x = ... fun { x } Will emit: Ident(x) Which gets transformed to: Select(Ident(x), "elem") If ReferenceToBoxedwere used instead of Ident, no transformation would be performed.
- 
      
      
      
        
      
    
      
        
        trait
      
      
        
              ReificationSupportApi
             extends AnyRef
      
      
      This is an internal implementation class. 
- 
      
      
      
        
      
    
      
        
        type
      
      
        BuildApi = Universe.ReificationSupportApi
      
      
      - Annotations
- @deprecated
- Deprecated
- (Since version 2.11.0) Use - internal.ReificationSupportApiinstead
 
Abstract Value Members
- 
      
      
      
        
      
    
      
        implicit abstract 
        val
      
      
        FreeTermSymbolTag: ClassTag[Universe.FreeTermSymbol]
      
      
      Tag that preserves the identity of FreeTermSymbolin the face of erasure.Tag that preserves the identity of FreeTermSymbolin the face of erasure. Can be used for pattern matching, instance tests, serialization and the like.
- 
      
      
      
        
      
    
      
        implicit abstract 
        val
      
      
        FreeTypeSymbolTag: ClassTag[Universe.FreeTypeSymbol]
      
      
      Tag that preserves the identity of FreeTermSymbolin the face of erasure.Tag that preserves the identity of FreeTermSymbolin the face of erasure. Can be used for pattern matching, instance tests, serialization and the like.
- 
      
      
      
        
      
    
      
        abstract 
        val
      
      
        ReferenceToBoxed: Universe.ReferenceToBoxedExtractor
      
      
      The constructor/extractor for ReferenceToBoxedinstances.
- 
      
      
      
        
      
    
      
        implicit abstract 
        val
      
      
        ReferenceToBoxedTag: ClassTag[Universe.ReferenceToBoxed]
      
      
      Tag that preserves the identity of ReferenceToBoxedin the face of erasure.Tag that preserves the identity of ReferenceToBoxedin the face of erasure. Can be used for pattern matching, instance tests, serialization and the like.
- 
      
      
      
        
      
    
      
        abstract 
        val
      
      
        compat: Universe.Compat
      
      
      Provides enrichments to ensure source compatibility between Scala 2.10 and Scala 2.11. Provides enrichments to ensure source compatibility between Scala 2.10 and Scala 2.11. If in your reflective program for Scala 2.10 you've used something that's now become an internal API, a single compat._import will fix things for you.
- 
      
      
      
        
      
    
      
        abstract 
        val
      
      
        internal: Universe.Internal
      
      
      - See also
 
- 
      
      
      
        
      
    
      
        abstract 
        val
      
      
        build: Universe.ReificationSupportApi
      
      
      - Annotations
- @deprecated
- Deprecated
- (Since version 2.11.0) Use - internal.reificationSupportinstead
 
Concrete Value Members
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        !=(arg0: Any): Boolean
      
      
      Test two objects for inequality. Test two objects for inequality. - returns
- trueif !(this == that), false otherwise.
 - Definition Classes
- AnyRef → Any
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        ##(): Int
      
      
      Equivalent to x.hashCodeexcept for boxed numeric types andnull.Equivalent to x.hashCodeexcept for boxed numeric types andnull. For numerics, it returns a hash value which is consistent with value equality: if two value type instances compare as true, then ## will produce the same hash value for each of them. Fornullreturns a hashcode wherenull.hashCodethrows aNullPointerException.- returns
- a hash value consistent with == 
 - Definition Classes
- AnyRef → Any
 
-  def +(other: String): String
-  def ->[B](y: B): (Internals, B)
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        ==(arg0: Any): Boolean
      
      
      The expression x == thatis equivalent toif (x eq null) that eq null else x.equals(that).The expression x == thatis equivalent toif (x eq null) that eq null else x.equals(that).- returns
- trueif the receiver object is equivalent to the argument;- falseotherwise.
 - Definition Classes
- AnyRef → Any
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        asInstanceOf[T0]: T0
      
      
      Cast the receiver object to be of type T0.Cast the receiver object to be of type T0.Note that the success of a cast at runtime is modulo Scala's erasure semantics. Therefore the expression 1.asInstanceOf[String]will throw aClassCastExceptionat runtime, while the expressionList(1).asInstanceOf[List[String]]will not. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the requested type.- returns
- the receiver object. 
 - Definition Classes
- Any
- Exceptions thrown
- ClassCastExceptionif the receiver object is not an instance of the erasure of type- T0.
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        clone(): AnyRef
      
      
      Create a copy of the receiver object. Create a copy of the receiver object. The default implementation of the clonemethod is platform dependent.- returns
- a copy of the receiver object. 
 - Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( ... )
- Note
- not specified by SLS as a member of AnyRef 
 
-  def ensuring(cond: (Internals) ⇒ Boolean, msg: ⇒ Any): Internals
-  def ensuring(cond: (Internals) ⇒ Boolean): Internals
-  def ensuring(cond: Boolean, msg: ⇒ Any): Internals
-  def ensuring(cond: Boolean): Internals
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        eq(arg0: AnyRef): Boolean
      
      
      Tests whether the argument ( that) is a reference to the receiver object (this).Tests whether the argument ( that) is a reference to the receiver object (this).The eqmethod implements an equivalence relation on non-null instances ofAnyRef, and has three additional properties:- It is consistent: for any non-null instances xandyof typeAnyRef, multiple invocations ofx.eq(y)consistently returnstrueor consistently returnsfalse.
- For any non-null instance xof typeAnyRef,x.eq(null)andnull.eq(x)returnsfalse.
- null.eq(null)returns- true.
 When overriding the equalsorhashCodemethods, it is important to ensure that their behavior is consistent with reference equality. Therefore, if two objects are references to each other (o1 eq o2), they should be equal to each other (o1 == o2) and they should hash to the same value (o1.hashCode == o2.hashCode).- returns
- trueif the argument is a reference to the receiver object;- falseotherwise.
 - Definition Classes
- AnyRef
 
- It is consistent: for any non-null instances 
- 
      
      
      
        
      
    
      
        
        def
      
      
        equals(arg0: Any): Boolean
      
      
      The equality method for reference types. 
- 
      
      
      
        
      
    
      
        
        def
      
      
        finalize(): Unit
      
      
      Called by the garbage collector on the receiver object when there are no more references to the object. Called by the garbage collector on the receiver object when there are no more references to the object. The details of when and if the finalizemethod is invoked, as well as the interaction betweenfinalizeand non-local returns and exceptions, are all platform dependent.- Attributes
- protected[java.lang]
- Definition Classes
- AnyRef
- Annotations
- @throws( classOf[java.lang.Throwable] )
- Note
- not specified by SLS as a member of AnyRef 
 
-  def formatted(fmtstr: String): String
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        getClass(): Class[_]
      
      
      Returns the runtime class representation of the object. Returns the runtime class representation of the object. - returns
- a class object corresponding to the runtime type of the receiver. 
 - Definition Classes
- AnyRef → Any
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        hashCode(): Int
      
      
      The hashCode method for reference types. 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        isInstanceOf[T0]: Boolean
      
      
      Test whether the dynamic type of the receiver object is T0.Test whether the dynamic type of the receiver object is T0.Note that the result of the test is modulo Scala's erasure semantics. Therefore the expression 1.isInstanceOf[String]will returnfalse, while the expressionList(1).isInstanceOf[List[String]]will returntrue. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the specified type.- returns
- trueif the receiver object is an instance of erasure of type- T0;- falseotherwise.
 - Definition Classes
- Any
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        ne(arg0: AnyRef): Boolean
      
      
      Equivalent to !(this eq that).Equivalent to !(this eq that).- returns
- trueif the argument is not a reference to the receiver object;- falseotherwise.
 - Definition Classes
- AnyRef
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        notify(): Unit
      
      
      Wakes up a single thread that is waiting on the receiver object's monitor. Wakes up a single thread that is waiting on the receiver object's monitor. - Definition Classes
- AnyRef
- Note
- not specified by SLS as a member of AnyRef 
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        notifyAll(): Unit
      
      
      Wakes up all threads that are waiting on the receiver object's monitor. Wakes up all threads that are waiting on the receiver object's monitor. - Definition Classes
- AnyRef
- Note
- not specified by SLS as a member of AnyRef 
 
- 
      
      
      
        
      
    
      
        final 
        def
      
      
        synchronized[T0](arg0: ⇒ T0): T0
      
      
      - Definition Classes
- AnyRef
 
- 
      
      
      
        
      
    
      
        
        def
      
      
        toString(): String
      
      
      Creates a String representation of this object. Creates a String representation of this object. The default representation is platform dependent. On the java platform it is the concatenation of the class name, "@", and the object's hashcode in hexadecimal. - returns
- a String representation of the object. 
 - 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( ... )
 
-  def →[B](y: B): (Internals, B)
Deprecated Value Members
- 
      
      
      
        
      
    
      
        
        def
      
      
        mkImporter(from0: Universe): Universe.Importer { val from: from0.type }
      
      
      - Annotations
- @deprecated
- Deprecated
- (Since version 2.11.0) Use - internal.createImporterinstead