scala.tools.nsc.transform.ExplicitOuter
The definition tree of the outer accessor for class mixinClass.
The definition tree of the outer accessor for class mixinClass.
The mixin class which defines the abstract outer accessor which is implemented by the generated one.
The definition tree of the outer accessor of current class
The definition tree of the outer accessor of current class
The directly enclosing outer parameter, if we are in a constructor
The directly enclosing outer parameter, if we are in a constructor
The path
which refers to the outer instance of class to of value base.`base'.$outer$$C1 ... .$outer$$Cn
The path
which refers to the outer instance of class to of value base. The result is typed but not positioned.`base'.$outer$$C1 ... .$outer$$Cn
base'.$outer$$C1 ... .$outer$$Cn
which refers to the outer instance of class to of
value base. The result is typed but not positioned.
...
...
...
...
The first outer selection from currently transformed tree.
The first outer selection from currently transformed tree. The result is typed but not positioned.
The main transformation method
The main transformation method
The transformation method for whole compilation units
The transformation method for whole compilation units
(explicitOuterTransformer: StringAdd).self
(explicitOuterTransformer: StringFormat).self
(explicitOuterTransformer: ArrowAssoc[ExplicitOuterTransformer]).x
(Since version 2.10.0) Use leftOfArrow
instead
(explicitOuterTransformer: Ensuring[ExplicitOuterTransformer]).x
(Since version 2.10.0) Use resultOfEnsuring
instead
The phase performs the following transformations on terms:
-
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.
- A constructor of a non-trait inner class gets an outer parameter.
- A reference C.this where C refers to an outer class is replaced by a selection this.$outer$$C1 ... .$outer$$Cn (@see outerPath)
-
- A call to a constructor Q.<init>(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.<init>(OUTER, args) where OUTER is the qualifier corresponding to the singleton type Q.
- A call to a constructor this.<init>(args) in a secondary constructor is augmented to this.<init>(OUTER, args) where OUTER is the last parameter of the secondary constructor.
- Remove private modifier from class members M that are accessed from an inner class.
- Remove protected modifier from class members M that are accessed without a super qualifier accessed from an inner class or trait.
- Remove private and protected modifiers from type symbols
- Remove private modifiers from members of traits
Note: The whole transform is run in phase explicitOuter.next.