Skip to content

Commit 29c9cbc

Browse files
committed
WIP Support ident references in Java code to static classes declared in a base class
1 parent 640b07c commit 29c9cbc

File tree

2 files changed

+26
-3
lines changed
  • src/compiler/scala/tools/nsc/typechecker
  • test/files/pos/java-ref-super-class-static

2 files changed

+26
-3
lines changed

src/compiler/scala/tools/nsc/typechecker/Contexts.scala

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1072,14 +1072,25 @@ trait Contexts { self: Analyzer =>
10721072
|| unit.exists && s.sourceFile != unit.source.file
10731073
)
10741074
)
1075-
def lookupInPrefix(name: Name) = {
1075+
def lookupInPrefix(name: Name): Symbol = {
10761076
val sym = pre.member(name).filter(qualifies)
10771077
def isNonPackageNoModuleClass(sym: Symbol) =
10781078
sym.isClass && !sym.isModuleClass && !sym.isPackageClass
10791079
if (!sym.exists && unit.isJava && isNonPackageNoModuleClass(pre.typeSymbol)) {
1080+
var baseClasses = pre.baseClasses
1081+
while (baseClasses != Nil) {
1082+
val base = baseClasses.head
1083+
val pre1 = companionSymbolOf(base, this).typeOfThis
1084+
val sym = pre1.member(name).filter(qualifies)
1085+
.andAlso(_ => pre = pre1)
1086+
if (sym != NoSymbol) {
1087+
pre = pre1
1088+
return sym
1089+
}
1090+
baseClasses = baseClasses.tail
1091+
}
1092+
NoSymbol
10801093
// TODO factor out duplication with Typer::inCompanionForJavaStatic
1081-
val pre1 = companionSymbolOf(pre.typeSymbol, this).typeOfThis
1082-
pre1.member(name).filter(qualifies).andAlso(_ => pre = pre1)
10831094
} else sym
10841095
}
10851096
def accessibleInPrefix(s: Symbol) = isAccessible(s, pre, superAccess = false)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
class J {
2+
static class Base {
3+
static class StaticInner {}
4+
class Inner {}
5+
}
6+
static class Sub extends Base {
7+
void f1( Inner inner) {}
8+
9+
void f2( StaticInner inner) {} // not found: "StaticInner"
10+
void f3(Base.StaticInner inner) {} // workaround: qualifiy
11+
}
12+
}

0 commit comments

Comments
 (0)