Packages

c

scala.tools.nsc.transform.ExplicitOuter

ExplicitOuterTransformer

class ExplicitOuterTransformer extends OuterPathTransformer

The phase performs the following transformations (more or less...):

(1) An class which is not an interface and is not static gets an outer accessor (@see outerDefs). (1a) A class which is not a trait gets an outer field.

(4) A constructor of a non-trait inner class gets an outer parameter.

(5) A reference C.this where C refers to an outer class is replaced by a selection this.$outer$$C1 ... .$outer$$Cn (@see outerPath)

(7) A call to a constructor Q.(args) or Q.$init$(args) where Q != this and the constructor belongs to a non-static class is augmented by an outer argument. E.g. Q.(OUTER, args) where OUTER is the qualifier corresponding to the singleton type Q.

(8) A call to a constructor this.(args) in a secondary constructor is augmented to this.(OUTER, args) where OUTER is the last parameter of the secondary constructor.

(9) Remove private modifier from class members M that are accessed from an inner class.

(10) Remove protected modifier from class members M that are accessed without a super qualifier accessed from an inner class or trait.

(11) Remove private and protected modifiers from type symbols

Note: The whole transform is run in phase explicitOuter.next.

TODO: Make this doc reflect what's actually going on. Some of the deviations are motivated by separate compilation (name mangling based on usage is inherently unstable). Now that traits are compiled 1:1 to interfaces, they can have private members, so there's also less need to make trait members non-private (they still may need to be implemented in subclasses, though we could make those protected...).

Self Type
ExplicitOuterTransformer
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. ExplicitOuterTransformer
  2. OuterPathTransformer
  3. UnderConstructionTransformer
  4. TypingTransformer
  5. Transformer
  6. Transformer
  7. AnyRef
  8. Any
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ExplicitOuterTransformer(unit: Global.CompilationUnit)

Value Members

  1. final def !=(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  2. final def ##(): Int
    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  4. final def asInstanceOf[T0]: T0
    Definition Classes
    Any
  5. def atOwner[A](tree: Global.Tree, owner: Global.Symbol)(trans: ⇒ A): A
    Definition Classes
    TypingTransformer
  6. final def atOwner[A](owner: Global.Symbol)(trans: ⇒ A): A
    Definition Classes
    TypingTransformer → Transformer
  7. def clone(): AnyRef
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()
  8. var curTree: Global.Tree
    Attributes
    protected
    Definition Classes
    TypingTransformer
  9. def currentClass: Global.Symbol
    Attributes
    protected
    Definition Classes
    Transformer
  10. def currentMethod: Global.Symbol
    Attributes
    protected
    Definition Classes
    Transformer
  11. var currentOwner: Global.Symbol
    Attributes
    protected[scala]
    Definition Classes
    Transformer
  12. final def eq(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  13. def equals(arg0: Any): Boolean
    Definition Classes
    AnyRef → Any
  14. def finalize(): Unit
    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  15. final def getClass(): Class[_]
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  16. def hashCode(): Int
    Definition Classes
    AnyRef → Any
    Annotations
    @native()
  17. final def isInstanceOf[T0]: Boolean
    Definition Classes
    Any
  18. def isUnderConstruction(clazz: Global.Symbol): Boolean
    Attributes
    protected
    Definition Classes
    UnderConstructionTransformer
  19. var localTyper: (analyzer)#Typer
    Definition Classes
    TypingTransformer
  20. def mixinOuterAccessorDef(mixinClass: Global.Symbol): Global.Tree

    The definition tree of the outer accessor for class mixinClass.

    The definition tree of the outer accessor for class mixinClass.

    mixinClass

    The mixin class which defines the abstract outer accessor which is implemented by the generated one.

  21. final def ne(arg0: AnyRef): Boolean
    Definition Classes
    AnyRef
  22. final def notify(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  23. final def notifyAll(): Unit
    Definition Classes
    AnyRef
    Annotations
    @native()
  24. def outerAccessorDef: Global.Tree

    The definition tree of the outer accessor of current class

  25. def outerFieldDef: Global.Tree

    The definition tree of the outer accessor of current class

  26. var outerParam: Global.Symbol

    The directly enclosing outer parameter, if we are in a constructor

    The directly enclosing outer parameter, if we are in a constructor

    Attributes
    protected
    Definition Classes
    OuterPathTransformer
  27. def outerPath(base: Global.Tree, from: Global.Symbol, to: Global.Symbol): Global.Tree

    The path

    `base'.$outer$$C1 ... .$outer$$Cn
    
    which refers to the outer instance of class to of value base.

    The path

    `base'.$outer$$C1 ... .$outer$$Cn
    
    which refers to the outer instance of class to of value base. The result is typed but not positioned.

    base'.$outer$$C1 ... .$outer$$Cn which refers to the outer instance of class to of value base. The result is typed but not positioned.

    Attributes
    protected
    Definition Classes
    OuterPathTransformer
  28. def outerValue: Global.Tree

    The first outer selection from currently transformed tree.

    The first outer selection from currently transformed tree. The result is typed but not positioned.

    Will return EmptyTree if there is no outer accessor because of a premature self reference.

    Attributes
    protected
    Definition Classes
    OuterPathTransformer
  29. final def synchronized[T0](arg0: ⇒ T0): T0
    Definition Classes
    AnyRef
  30. def toString(): String
    Definition Classes
    AnyRef → Any
  31. def transform(tree: Global.Tree): Global.Tree

    The main transformation method

    The main transformation method

    Definition Classes
    ExplicitOuterTransformerOuterPathTransformer → UnderConstructionTransformer → TypingTransformer → Transformer
  32. def transformCaseDefs(trees: List[Global.CaseDef]): List[Global.CaseDef]
    Definition Classes
    Transformer
  33. def transformIdents(trees: List[Global.Ident]): List[Global.Ident]
    Definition Classes
    Transformer
  34. def transformMemberDefs(trees: List[Global.MemberDef]): List[Global.MemberDef]
    Definition Classes
    Transformer
  35. def transformModifiers(mods: Global.Modifiers): Global.Modifiers
    Definition Classes
    Transformer
  36. def transformStats(stats: List[Global.Tree], exprOwner: Global.Symbol): List[Global.Tree]
    Definition Classes
    Transformer
  37. def transformTemplate(tree: Global.Template): Global.Template
    Definition Classes
    Transformer
  38. def transformTrees(trees: List[Global.Tree]): List[Global.Tree]
    Definition Classes
    Transformer
  39. def transformTypeDefs(trees: List[Global.TypeDef]): List[Global.TypeDef]
    Definition Classes
    Transformer
  40. def transformUnit(unit: Global.CompilationUnit): Unit

    The transformation method for whole compilation units

    The transformation method for whole compilation units

    Definition Classes
    ExplicitOuterTransformerTransformer
  41. def transformValDef(tree: Global.ValDef): Global.ValDef
    Definition Classes
    Transformer
  42. def transformValDefs(trees: List[Global.ValDef]): List[Global.ValDef]
    Definition Classes
    Transformer
  43. def transformValDefss(treess: List[List[Global.ValDef]]): List[List[Global.ValDef]]
    Definition Classes
    Transformer
  44. val treeCopy: Global.TreeCopier
    Definition Classes
    Transformer
  45. final def wait(): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  46. final def wait(arg0: Long, arg1: Int): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  47. final def wait(arg0: Long): Unit
    Definition Classes
    AnyRef
    Annotations
    @throws( ... ) @native()

Inherited from OuterPathTransformer

Inherited from Global.Transformer

Inherited from Global.Transformer

Inherited from AnyRef

Inherited from Any

Ungrouped