@@ -596,13 +596,30 @@ class Typer extends Namer
596596 .withSpan(tree.span)
597597 .computeNullable()
598598
599- def typeSelectOnType (qual : untpd.Tree )(using Context ) =
600- typedSelect(untpd.cpy.Select (tree)(qual, tree.name.toTypeName), pt)
599+ def javaSelectOnType (qual : Tree )(using Context ) =
600+ // semantic name conversion for `O$` in java code
601+ if ! qual.symbol.is(JavaDefined ) && tree.name.endsWith(" $" )
602+ then
603+ val nameOrig = tree.name.asSimpleName
604+ val nameSemantic = nameOrig.slice(0 , nameOrig.length - 1 ).moduleClassName
605+ val tree2 = untpd.cpy.Select (tree)(qual, nameSemantic)
606+ assignType(tree2, qual)
607+ else
608+ assignType(cpy.Select (tree)(qual, tree.name), qual)
601609
602610 def tryJavaSelectOnType (using Context ): Tree = tree.qualifier match {
603- case Select (qual, name) => typeSelectOnType(untpd.Select (qual, name.toTypeName))
604- case Ident (name) => typeSelectOnType(untpd.Ident (name.toTypeName))
605- case _ => errorTree(tree, " cannot convert to type selection" ) // will never be printed due to fallback
611+ case sel @ Select (qual, name) =>
612+ val qual1 = untpd.cpy.Select (sel)(qual, name.toTypeName)
613+ val qual2 = typedType(qual1, WildcardType )
614+ javaSelectOnType(qual2)
615+
616+ case id @ Ident (name) =>
617+ val qual1 = untpd.cpy.Ident (id)(name.toTypeName)
618+ val qual2 = typedType(qual1, WildcardType )
619+ javaSelectOnType(qual2)
620+
621+ case _ =>
622+ errorTree(tree, " cannot convert to type selection" ) // will never be printed due to fallback
606623 }
607624
608625 def selectWithFallback (fallBack : Context ?=> Tree ) =
0 commit comments