@@ -1008,13 +1008,24 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
10081008 typedSelectWithAdapt(tree, pt, qual).withSpan(tree.span).computeNullable()
10091009
10101010 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
10181029
10191030 def tryJavaSelectOnType (using Context ): Tree = tree.qualifier match {
10201031 case sel @ Select (qual, name) =>
0 commit comments