@@ -993,13 +993,24 @@ class Typer(@constructorOnly nestingLevel: Int = 0) extends Namer
993
993
typedSelectWithAdapt(tree, pt, qual).withSpan(tree.span).computeNullable()
994
994
995
995
def javaSelection (qual : Tree )(using Context ) =
996
- val tree1 = assignType(cpy.Select (tree)(qual, tree.name), qual)
997
- tree1.tpe match
998
- case moduleRef : TypeRef if moduleRef.symbol.is(ModuleClass , butNot = JavaDefined ) =>
999
- // handle unmangling of module names (Foo$ -> Foo[ModuleClass])
1000
- cpy.Select (tree)(qual, tree.name.unmangleClassName).withType(moduleRef)
1001
- case _ =>
1002
- tree1
996
+ qual match
997
+ case id @ Ident (name) if id.symbol.is(Package ) && ! id.symbol.owner.isRoot =>
998
+ def nextPackage (last : Symbol )(using Context ): Type =
999
+ val startAt = ctx.outersIterator.dropWhile(_.owner != last.owner).drop(1 ).next()
1000
+ val next = findRef(name, WildcardType , required = Package , EmptyFlags , qual.srcPos)(using startAt)
1001
+ if next.exists && ! next.typeSymbol.owner.isRoot then nextPackage(next.typeSymbol)
1002
+ else next
1003
+ val next = nextPackage(id.symbol)
1004
+ val qual1 = if next.exists then assignType(cpy.Ident (id)(tree.name), next) else qual
1005
+ assignType(cpy.Select (tree)(qual1, tree.name), qual1)
1006
+ case _ =>
1007
+ val tree1 = assignType(cpy.Select (tree)(qual, tree.name), qual)
1008
+ tree1.tpe match
1009
+ case moduleRef : TypeRef if moduleRef.symbol.is(ModuleClass , butNot = JavaDefined ) =>
1010
+ // handle unmangling of module names (Foo$ -> Foo[ModuleClass])
1011
+ cpy.Select (tree)(qual, tree.name.unmangleClassName).withType(moduleRef)
1012
+ case _ =>
1013
+ tree1
1003
1014
1004
1015
def tryJavaSelectOnType (using Context ): Tree = tree.qualifier match {
1005
1016
case sel @ Select (qual, name) =>
0 commit comments