aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dotty/tools/dotc/core/SymDenotations.scala14
1 files changed, 10 insertions, 4 deletions
diff --git a/src/dotty/tools/dotc/core/SymDenotations.scala b/src/dotty/tools/dotc/core/SymDenotations.scala
index 4cc15897c..ae8fceeb7 100644
--- a/src/dotty/tools/dotc/core/SymDenotations.scala
+++ b/src/dotty/tools/dotc/core/SymDenotations.scala
@@ -666,10 +666,16 @@ object SymDenotations {
* for these definitions.
*/
final def enclosingClass(implicit ctx: Context): Symbol = {
- def enclClass(d: SymDenotation): Symbol =
- if (d.isClass || !d.exists) d.symbol else enclClass(d.owner)
- val cls = enclClass(this)
- if (this is InSuperCall) cls.owner.enclosingClass else cls
+ def enclClass(sym: Symbol, skip: Boolean): Symbol = {
+ def newSkip = sym.is(InSuperCall) || sym.is(JavaStaticTerm)
+ if (!sym.exists)
+ NoSymbol
+ else if (sym.isClass)
+ if (skip) enclClass(sym.owner, newSkip) else sym
+ else
+ enclClass(sym.owner, skip || newSkip)
+ }
+ enclClass(symbol, false)
}
final def isEffectivelyFinal(implicit ctx: Context): Boolean = {