File tree Expand file tree Collapse file tree 3 files changed +30
-7
lines changed
compiler/src/dotty/tools/dotc/transform Expand file tree Collapse file tree 3 files changed +30
-7
lines changed Original file line number Diff line number Diff line change @@ -81,14 +81,19 @@ class ExplicitOuter extends MiniPhaseTransform with InfoTransformer { thisTransf
81
81
! needsOuterAlways(cls) &&
82
82
impl.existsSubTree(referencesOuter(cls, _)))
83
83
ensureOuterAccessors(cls)
84
- if (hasOuter(cls)) {
84
+
85
+ val hasOuterFlag = hasOuter(cls)
86
+ if (hasOuterFlag || cls.mixins.exists(needsOuterIfReferenced)) {
85
87
val newDefs = new mutable.ListBuffer [Tree ]
86
- if (isTrait)
87
- newDefs += DefDef (outerAccessor(cls).asTerm, EmptyTree )
88
- else {
89
- val outerParamAcc = outerParamAccessor(cls)
90
- newDefs += ValDef (outerParamAcc, EmptyTree )
91
- newDefs += DefDef (outerAccessor(cls).asTerm, ref(outerParamAcc))
88
+
89
+ if (hasOuterFlag) {
90
+ if (isTrait)
91
+ newDefs += DefDef (outerAccessor(cls).asTerm, EmptyTree )
92
+ else {
93
+ val outerParamAcc = outerParamAccessor(cls)
94
+ newDefs += ValDef (outerParamAcc, EmptyTree )
95
+ newDefs += DefDef (outerAccessor(cls).asTerm, ref(outerParamAcc))
96
+ }
92
97
}
93
98
94
99
for (parentTrait <- cls.mixins) {
Original file line number Diff line number Diff line change
1
+ a
Original file line number Diff line number Diff line change
1
+ class A {
2
+ val a = " a"
3
+ trait Inner {
4
+ def f = println(a)
5
+ def h = 3
6
+ }
7
+ }
8
+
9
+ class Inner extends O .a.Inner
10
+
11
+ object O {
12
+ val a = new A
13
+
14
+ def main (args : Array [String ]): Unit = {
15
+ (new Inner ).f
16
+ }
17
+ }
You can’t perform that action at this time.
0 commit comments