dotty.tools.dotc.transform

ExplicitOuter

Related Docs: object ExplicitOuter | package transform

class ExplicitOuter extends MiniPhaseTransform with InfoTransformer

This phase adds outer accessors to classes and traits that need them. Compared to Scala 2.x, it tries to minimize the set of classes that take outer accessors by scanning class implementations for outer references.

The following things are delayed until erasure and are performed by class OuterOps:

replacement of outer this by outer paths is done in Erasure. needs to run after pattern matcher as it can add outer checks and force creation of $outer

Self Type
ExplicitOuter
Linear Supertypes
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. ExplicitOuter
  2. InfoTransformer
  3. DenotTransformer
  4. MiniPhaseTransform
  5. MiniPhase
  6. Phase
  7. TreeTransform
  8. DotClass
  9. AnyRef
  10. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new ExplicitOuter()

Value Members

  1. final def !=(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Definition Classes
    AnyRef → Any
  3. final def <=(that: Phase): Boolean

    Definition Classes
    Phase
  4. final def ==(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  5. val Outer: Key[ast.tpd.Tree]

  6. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  7. def atGroupEnd[T](action: (Context) ⇒ T)(implicit ctx: Context, info: TransformerInfo): T

    Definition Classes
    TreeTransform
  8. def checkPostCondition(tree: ast.tpd.Tree)(implicit ctx: Context): Unit

    Check what the phase achieves, to be called at any point after it is finished.

    Check what the phase achieves, to be called at any point after it is finished.

    Definition Classes
    Phase
  9. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  10. def description: String

    Definition Classes
    Phase
  11. def end: PhaseId

    Definition Classes
    Phase
  12. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  13. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  14. final def erasedTypes: Boolean

    Definition Classes
    Phase
  15. def exists: Boolean

    Definition Classes
    Phase
  16. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  17. final def flatClasses: Boolean

    Definition Classes
    Phase
  18. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  19. final def hasNext: Boolean

    Definition Classes
    Phase
  20. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  21. def id: Int

    The sequence position of this phase in the given context where 0 is reserved for NoPhase and the first real phase is at position 1.

    The sequence position of this phase in the given context where 0 is reserved for NoPhase and the first real phase is at position 1. -1 if the phase is not installed in the context.

    Definition Classes
    Phase
  22. var idx: Int

    id of this mini phase in group

    id of this mini phase in group

    Definition Classes
    MiniPhase
  23. def init(base: ContextBase, id: Int): Unit

    Attributes
    protected[dotty.tools.dotc.core.Phases]
    Definition Classes
    Phase
  24. def init(base: ContextBase, start: Int, end: Int): Unit

    Attributes
    protected[dotty.tools.dotc.core.Phases]
    Definition Classes
    Phase
  25. def isCheckable: Boolean

    Output should be checkable by TreeChecker

    Output should be checkable by TreeChecker

    Definition Classes
    Phase
  26. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  27. def isTyper: Boolean

    Is this phase the standard typerphase? True for FrontEnd, but not for other first phases (such as FromTasty).

    Is this phase the standard typerphase? True for FrontEnd, but not for other first phases (such as FromTasty). The predicate is tested in some places that perform checks and corrections. It's different from isAfterTyper (and cheaper to test).

    Definition Classes
    Phase
  28. final def iterator: Iterator[Phase]

    Definition Classes
    Phase
  29. final def labelsReordered: Boolean

    Definition Classes
    Phase
  30. def lastPhaseId(implicit ctx: Context): Int

    The last phase during which the transformed denotations are valid

    The last phase during which the transformed denotations are valid

    Definition Classes
    DenotTransformer
  31. def mayChange(sym: Symbol)(implicit ctx: Context): Boolean

    Denotations with a symbol where mayChange is false are guaranteed to be unaffected by this transform, so transformInfo need not be run.

    Denotations with a symbol where mayChange is false are guaranteed to be unaffected by this transform, so transformInfo need not be run. This can save time, and more importantly, can help avoid forcing symbol completers.

    Definition Classes
    ExplicitOuterInfoTransformer
  32. def mkTreeTransformer: TreeTransformer

    Attributes
    protected
    Definition Classes
    MiniPhase
  33. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  34. final def next: Phase

    Definition Classes
    Phase
  35. final def notify(): Unit

    Definition Classes
    AnyRef
  36. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  37. def period: Period

    Definition Classes
    Phase
  38. def phase: MiniPhaseTransform

    Definition Classes
    MiniPhaseTransformTreeTransform
  39. def phaseName: String

    Definition Classes
    ExplicitOuterPhase
  40. def prepareForAlternative(tree: ast.tpd.Alternative)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  41. def prepareForApply(tree: ast.tpd.Apply)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  42. def prepareForAssign(tree: ast.tpd.Assign)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  43. def prepareForBind(tree: ast.tpd.Bind)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  44. def prepareForBlock(tree: ast.tpd.Block)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  45. def prepareForCaseDef(tree: ast.tpd.CaseDef)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  46. def prepareForClosure(tree: ast.tpd.Closure)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  47. def prepareForDefDef(tree: ast.tpd.DefDef)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  48. def prepareForIdent(tree: ast.tpd.Ident)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  49. def prepareForIf(tree: ast.tpd.If)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  50. def prepareForInlined(tree: ast.tpd.Inlined)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  51. def prepareForLiteral(tree: ast.tpd.Literal)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  52. def prepareForMatch(tree: ast.tpd.Match)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  53. def prepareForNew(tree: ast.tpd.New)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  54. def prepareForPackageDef(tree: ast.tpd.PackageDef)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  55. def prepareForReturn(tree: ast.tpd.Return)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  56. def prepareForSelect(tree: ast.tpd.Select)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  57. def prepareForSeqLiteral(tree: ast.tpd.SeqLiteral)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  58. def prepareForStats(trees: List[ast.tpd.Tree])(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  59. def prepareForSuper(tree: ast.tpd.Super)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  60. def prepareForTemplate(tree: ast.tpd.Template)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  61. def prepareForThis(tree: ast.tpd.This)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  62. def prepareForTry(tree: ast.tpd.Try)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  63. def prepareForTypeApply(tree: ast.tpd.TypeApply)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  64. def prepareForTypeDef(tree: ast.tpd.TypeDef)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  65. def prepareForTypeTree(tree: ast.tpd.TypeTree)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  66. def prepareForTyped(tree: ast.tpd.Typed)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  67. def prepareForUnApply(tree: ast.tpd.UnApply)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  68. def prepareForUnit(tree: ast.tpd.Tree)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  69. def prepareForValDef(tree: ast.tpd.ValDef)(implicit ctx: Context): TreeTransform

    Definition Classes
    TreeTransform
  70. final def prev: Phase

    Definition Classes
    Phase
  71. final def refChecked: Boolean

    Definition Classes
    Phase
  72. def relaxedTyping: Boolean

    If set, allow missing or superfluous arguments in applications and type applications.

    If set, allow missing or superfluous arguments in applications and type applications.

    Definition Classes
    Phase
  73. def run(implicit ctx: Context): Unit

    Definition Classes
    MiniPhasePhase
  74. def runOn(units: List[CompilationUnit])(implicit ctx: Context): List[CompilationUnit]

    Definition Classes
    Phase
  75. def runsAfter: Set[Class[_ <: Phase]]

    List of names of phases that should have finished their processing of all compilation units before this phase starts

    List of names of phases that should have finished their processing of all compilation units before this phase starts

    Definition Classes
    ExplicitOuterPhase
  76. def runsAfterGroupsOf: Set[Class[_ <: Phase]]

    List of names of phases that should have finished their processing of all compilation units before this phase starts

    List of names of phases that should have finished their processing of all compilation units before this phase starts

    Definition Classes
    MiniPhase
  77. def start: Int

    Definition Classes
    Phase
  78. final def symbolicRefs: Boolean

    Definition Classes
    Phase
  79. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  80. def toString(): String

    Definition Classes
    Phase → AnyRef → Any
  81. def transform(ref: SingleDenotation)(implicit ctx: Context): SingleDenotation

    The transformation method

    The transformation method

    Definition Classes
    InfoTransformerDenotTransformer
  82. def transform(tree: ast.tpd.Tree)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Transform tree using all transforms of current group (including this one)

    Transform tree using all transforms of current group (including this one)

    Definition Classes
    TreeTransform
  83. def transformAlternative(tree: ast.tpd.Alternative)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  84. def transformApply(tree: ast.tpd.Apply)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  85. def transformAssign(tree: ast.tpd.Assign)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  86. def transformBind(tree: ast.tpd.Bind)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  87. def transformBlock(tree: ast.tpd.Block)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  88. def transformCaseDef(tree: ast.tpd.CaseDef)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  89. def transformClosure(tree: ast.tpd.Closure)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    ExplicitOuterTreeTransform
  90. def transformDefDef(tree: ast.tpd.DefDef)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  91. def transformFollowing(tree: ast.tpd.Tree)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Transform single node using all transforms following the current one in this group

    Transform single node using all transforms following the current one in this group

    Definition Classes
    TreeTransform
  92. def transformFollowingDeep(tree: ast.tpd.Tree)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Transform subtree using all transforms following the current one in this group

    Transform subtree using all transforms following the current one in this group

    Definition Classes
    TreeTransform
  93. def transformIdent(tree: ast.tpd.Ident)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  94. def transformIf(tree: ast.tpd.If)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  95. def transformInfo(tp: Type, sym: Symbol)(implicit ctx: Context): Type

    Add outer accessors if a class always needs an outer pointer

    Add outer accessors if a class always needs an outer pointer

    Definition Classes
    ExplicitOuterInfoTransformer
  96. def transformInlined(tree: ast.tpd.Inlined)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  97. def transformLiteral(tree: ast.tpd.Literal)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  98. def transformMatch(tree: ast.tpd.Match)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  99. def transformNew(tree: ast.tpd.New)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  100. def transformOther(tree: ast.tpd.Tree)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  101. def transformPackageDef(tree: ast.tpd.PackageDef)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  102. def transformReturn(tree: ast.tpd.Return)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  103. def transformSelect(tree: ast.tpd.Select)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Convert a selection of the form qual.C_<OUTER> to an outer path from qual to C

    Convert a selection of the form qual.C_<OUTER> to an outer path from qual to C

    Definition Classes
    ExplicitOuterTreeTransform
  104. def transformSeqLiteral(tree: ast.tpd.SeqLiteral)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  105. def transformStats(trees: List[ast.tpd.Tree])(implicit ctx: Context, info: TransformerInfo): List[ast.tpd.Tree]

    Definition Classes
    TreeTransform
  106. def transformSuper(tree: ast.tpd.Super)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  107. def transformTemplate(impl: ast.tpd.Template)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    First, add outer accessors if a class does not have them yet and it references an outer this.

    First, add outer accessors if a class does not have them yet and it references an outer this. If the class has outer accessors, implement them. Furthermore, if a parent trait might have an outer accessor, provide an implementation for the outer accessor by computing the parent's outer from the parent type prefix. If the trait ends up not having an outer accessor after all, the implementation is redundant, but does not harm. The same logic is not done for non-trait parent classes because for them the outer pointer is passed in the super constructor, which will be implemented later in a separate phase which needs to run after erasure. However, we make sure here that the super class constructor is indeed a New, and not just a type.

    Definition Classes
    ExplicitOuterTreeTransform
  108. def transformThis(tree: ast.tpd.This)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  109. def transformTry(tree: ast.tpd.Try)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  110. def transformTypeApply(tree: ast.tpd.TypeApply)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  111. def transformTypeDef(tree: ast.tpd.TypeDef)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  112. def transformTypeTree(tree: ast.tpd.TypeTree)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  113. def transformTyped(tree: ast.tpd.Typed)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  114. def transformUnApply(tree: ast.tpd.UnApply)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  115. def transformUnit(tree: ast.tpd.Tree)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  116. def transformValDef(tree: ast.tpd.ValDef)(implicit ctx: Context, info: TransformerInfo): ast.tpd.Tree

    Definition Classes
    TreeTransform
  117. def treeTransform: MiniPhaseTransform

    Definition Classes
    MiniPhaseTransformMiniPhase
  118. def treeTransformPhase: Phase

    Definition Classes
    TreeTransform
  119. def unsupported(methodName: String): Nothing

    Throws an UnsupportedOperationException with the given method name.

    Throws an UnsupportedOperationException with the given method name.

    Definition Classes
    DotClass
  120. def validFor(implicit ctx: Context): Period

    The validity period of the transformer in the given context

    The validity period of the transformer in the given context

    Definition Classes
    DenotTransformer
  121. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  122. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  123. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from InfoTransformer

Inherited from DenotTransformer

Inherited from MiniPhaseTransform

Inherited from MiniPhase

Inherited from Phase

Inherited from TreeTransform

Inherited from DotClass

Inherited from AnyRef

Inherited from Any

Ungrouped