@@ -245,9 +245,11 @@ object ExplicitOuter {
245
245
private def hasOuter (cls : ClassSymbol )(using Context ): Boolean =
246
246
needsOuterIfReferenced(cls) && outerAccessor(cls).exists
247
247
248
- /** Class constructor takes an outer argument. Can be called only after phase ExplicitOuter. */
249
- def hasOuterParam (cls : ClassSymbol )(using Context ): Boolean =
250
- ! cls.is(Trait ) && needsOuterIfReferenced(cls) && outerAccessor(cls).exists
248
+ /** Class constructor needs an outer argument. Can be called only after phase ExplicitOuter. */
249
+ def needsOuterParam (cls : ClassSymbol )(using Context ): Boolean =
250
+ ! cls.is(Trait ) && needsOuterIfReferenced(cls) && (
251
+ cls.is(JavaDefined ) || // java inner class doesn't has outer accessor
252
+ outerAccessor(cls).exists)
251
253
252
254
/** Tree references an outer class of `cls` which is not a static owner.
253
255
*/
@@ -357,7 +359,7 @@ object ExplicitOuter {
357
359
358
360
/** If `cls` has an outer parameter add one to the method type `tp`. */
359
361
def addParam (cls : ClassSymbol , tp : Type ): Type =
360
- if (hasOuterParam (cls)) {
362
+ if (needsOuterParam (cls)) {
361
363
val mt @ MethodTpe (pnames, ptypes, restpe) = tp
362
364
mt.derivedLambdaType(
363
365
nme.OUTER :: pnames, outerClass(cls).typeRef :: ptypes, restpe)
@@ -378,7 +380,7 @@ object ExplicitOuter {
378
380
case TypeApply (Select (r, nme.asInstanceOf_), args) =>
379
381
outerArg(r) // cast was inserted, skip
380
382
}
381
- if (hasOuterParam (cls))
383
+ if (needsOuterParam (cls))
382
384
methPart(fun) match {
383
385
case Select (receiver, _) => outerArg(receiver).withSpan(fun.span) :: Nil
384
386
}
@@ -390,7 +392,7 @@ object ExplicitOuter {
390
392
* argument, the singleton list with the argument, otherwise Nil.
391
393
*/
392
394
def argsForNew (cls : ClassSymbol , tpe : Type ): List [Tree ] =
393
- if (hasOuterParam (cls)) singleton(fixThis(outerPrefix(tpe))) :: Nil
395
+ if (needsOuterParam (cls)) singleton(fixThis(outerPrefix(tpe))) :: Nil
394
396
else Nil
395
397
396
398
/** A path of outer accessors starting from node `start`. `start` defaults to the
0 commit comments