@@ -579,7 +579,7 @@ class Typer extends Namer
579
579
record(" typedSelect" )
580
580
581
581
def typeSelectOnTerm (using Context ): Tree =
582
- typedSelect(tree, pt, typedExpr(tree.qualifier, selectionProto (tree.name, pt, this )))
582
+ typedSelect(tree, pt, typedExpr(tree.qualifier, shallowSelectionProto (tree.name, pt, this )))
583
583
.withSpan(tree.span)
584
584
.computeNullable()
585
585
@@ -596,7 +596,7 @@ class Typer extends Namer
596
596
tryAlternatively(typeSelectOnTerm)(fallBack)
597
597
598
598
if (tree.qualifier.isType) {
599
- val qual1 = typedType(tree.qualifier, selectionProto (tree.name, pt, this ))
599
+ val qual1 = typedType(tree.qualifier, shallowSelectionProto (tree.name, pt, this ))
600
600
assignType(cpy.Select (tree)(qual1, tree.name), qual1)
601
601
}
602
602
else if (ctx.isJava && tree.name.isTypeName)
@@ -2901,7 +2901,7 @@ class Typer extends Namer
2901
2901
if selProto.isMatchedBy(qual.tpe) then None
2902
2902
else
2903
2903
tryEither {
2904
- val tree1 = tryExtensionOrConversion(tree, pt, qual, locked, NoViewsAllowed , privateOK = false )
2904
+ val tree1 = tryExtensionOrConversion(tree, pt, pt, qual, locked, NoViewsAllowed , privateOK = false )
2905
2905
if tree1.isEmpty then None
2906
2906
else Some (adapt(tree1, pt, locked))
2907
2907
} { (_, _) => None
@@ -2912,12 +2912,13 @@ class Typer extends Namer
2912
2912
2913
2913
/** Given a selection `qual.name`, try to convert to an extension method
2914
2914
* application `name(qual)` or insert an implicit conversion `c(qual).name`.
2915
+ * @return The converted tree, or `EmptyTree` is not successful.
2915
2916
*/
2916
2917
def tryExtensionOrConversion
2917
- (tree : untpd.Select , pt : Type , qual : Tree , locked : TypeVars , compat : Compatibility , privateOK : Boolean )
2918
+ (tree : untpd.Select , pt : Type , mbrProto : Type , qual : Tree , locked : TypeVars , compat : Compatibility , privateOK : Boolean )
2918
2919
(using Context ): Tree =
2919
2920
2920
- def selectionProto = SelectionProto (tree.name, pt , compat, privateOK)
2921
+ def selectionProto = SelectionProto (tree.name, mbrProto , compat, privateOK)
2921
2922
// try an extension method in scope
2922
2923
try
2923
2924
val nestedCtx = ctx.fresh.setNewTyperState()
@@ -2950,7 +2951,7 @@ class Typer extends Namer
2950
2951
if failure.isAmbiguous then
2951
2952
return (
2952
2953
if canDefineFurther(qual.tpe.widen) then
2953
- tryExtensionOrConversion(tree, pt, qual, locked, compat, privateOK)
2954
+ tryExtensionOrConversion(tree, pt, mbrProto, qual, locked, compat, privateOK)
2954
2955
else
2955
2956
err.typeMismatch(qual, selProto, failure.reason) // TODO: report NotAMember instead, but need to be aware of failure
2956
2957
)
0 commit comments