@@ -1008,13 +1008,24 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
1008
1008
typedSelectWithAdapt(tree, pt, qual).withSpan(tree.span).computeNullable()
1009
1009
1010
1010
def javaSelection (qual : Tree )(using Context ) =
1011
- val tree1 = assignType(cpy.Select (tree)(qual, tree.name), qual)
1012
- tree1.tpe match
1013
- case moduleRef : TypeRef if moduleRef.symbol.is(ModuleClass , butNot = JavaDefined ) =>
1014
- // handle unmangling of module names (Foo$ -> Foo[ModuleClass])
1015
- cpy.Select (tree)(qual, tree.name.unmangleClassName).withType(moduleRef)
1016
- case _ =>
1017
- tree1
1011
+ qual match
1012
+ case id @ Ident (name) if id.symbol.is(Package ) && ! id.symbol.owner.isRoot =>
1013
+ def nextPackage (last : Symbol )(using Context ): Type =
1014
+ val startAt = ctx.outersIterator.dropWhile(_.owner != last.owner).drop(1 ).next()
1015
+ val next = findRef(name, WildcardType , required = Package , EmptyFlags , qual.srcPos)(using startAt)
1016
+ if next.exists && ! next.typeSymbol.owner.isRoot then nextPackage(next.typeSymbol)
1017
+ else next
1018
+ val next = nextPackage(id.symbol)
1019
+ val qual1 = if next.exists then assignType(cpy.Ident (id)(tree.name), next) else qual
1020
+ assignType(cpy.Select (tree)(qual1, tree.name), qual1)
1021
+ case _ =>
1022
+ val tree1 = assignType(cpy.Select (tree)(qual, tree.name), qual)
1023
+ tree1.tpe match
1024
+ case moduleRef : TypeRef if moduleRef.symbol.is(ModuleClass , butNot = JavaDefined ) =>
1025
+ // handle unmangling of module names (Foo$ -> Foo[ModuleClass])
1026
+ cpy.Select (tree)(qual, tree.name.unmangleClassName).withType(moduleRef)
1027
+ case _ =>
1028
+ tree1
1018
1029
1019
1030
def tryJavaSelectOnType (using Context ): Tree = tree.qualifier match {
1020
1031
case sel @ Select (qual, name) =>
0 commit comments