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 Original file line number Diff line number Diff line change @@ -1072,14 +1072,25 @@ trait Contexts { self: Analyzer =>
1072
1072
|| unit.exists && s.sourceFile != unit.source.file
1073
1073
)
1074
1074
)
1075
- def lookupInPrefix (name : Name ) = {
1075
+ def lookupInPrefix (name : Name ): Symbol = {
1076
1076
val sym = pre.member(name).filter(qualifies)
1077
1077
def isNonPackageNoModuleClass (sym : Symbol ) =
1078
1078
sym.isClass && ! sym.isModuleClass && ! sym.isPackageClass
1079
1079
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
1080
1093
// TODO factor out duplication with Typer::inCompanionForJavaStatic
1081
- val pre1 = companionSymbolOf(pre.typeSymbol, this ).typeOfThis
1082
- pre1.member(name).filter(qualifies).andAlso(_ => pre = pre1)
1083
1094
} else sym
1084
1095
}
1085
1096
def accessibleInPrefix (s : Symbol ) = isAccessible(s, pre, superAccess = false )
Original file line number Diff line number Diff line change
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
+ }
You can’t perform that action at this time.
0 commit comments