@@ -1122,33 +1122,17 @@ trait Implicits:
11221122 adapt(generated, pt.widenExpr, locked)
11231123 else {
11241124 def untpdGenerated = untpd.TypedSplice (generated)
1125- def conversionResultType (info : Type ): Type = info match
1126- case info : PolyType => conversionResultType(info.resType)
1127- case info : MethodType if info.isImplicitMethod => conversionResultType(info.resType)
1128- case _ =>
1129- if info.derivesFrom(defn.ConversionClass ) then
1130- pt match
1131- case selProto : SelectionProto =>
1132- // we want to avoid embedding a SelectionProto in a Conversion, as the result type
1133- // as it might end up within a GADT cast type, e.g. tests/pos/i15867.scala
1134- // so, if we can find the target result type - as in,
1135- // if it matches the selection prototype, then let's adapt to that instead
1136- // otherwise just skip adapting with a prototype (by returning NoType)
1137- info.baseType(defn.ConversionClass ) match
1138- case AppliedType (_, List (_, restpe)) if selProto.isMatchedBy(restpe) =>
1139- restpe
1140- case _ => NoType // can't find conversion result type, avoid adapting with SelectionProto
1141- case _ : ProtoType => NoType // avoid adapting with ProtoType
1142- case _ => pt // not a ProtoType, so use it for adapting
1143- else NoType // not a Conversion, don't adapt
1125+ def producesConversion (info : Type ): Boolean = info match
1126+ case info : PolyType => producesConversion(info.resType)
1127+ case info : MethodType if info.isImplicitMethod => producesConversion(info.resType)
1128+ case _ => info.derivesFrom(defn.ConversionClass )
11441129 def tryConversion (using Context ) = {
1145- val restpeConv = if ref.symbol.is(Given ) then conversionResultType(ref.widenTermRefExpr) else NoType
11461130 val untpdConv =
1147- if restpeConv.exists then
1131+ if ref.symbol.is( Given ) && producesConversion(ref.symbol.info) then
11481132 untpd.Select (
11491133 untpd.TypedSplice (
11501134 adapt(generated,
1151- defn.ConversionClass .typeRef.appliedTo(argument.tpe, restpeConv ),
1135+ defn.ConversionClass .typeRef.appliedTo(argument.tpe, pt ),
11521136 locked)),
11531137 nme.apply)
11541138 else untpdGenerated
0 commit comments