File tree Expand file tree Collapse file tree 2 files changed +22
-1
lines changed
compiler/src/dotty/tools/dotc/transform Expand file tree Collapse file tree 2 files changed +22
-1
lines changed Original file line number Diff line number Diff line change @@ -53,7 +53,7 @@ class ExpandSAMs extends MiniPhase:
53
53
case tpe @ SAMType (_) if tpe.isRef(defn.PartialFunctionClass ) =>
54
54
val tpe1 = checkRefinements(tpe, fn)
55
55
toPartialFunction(tree, tpe1)
56
- case tpe @ SAMType (_) if ExpandSAMs .isPlatformSam(tpe.classSymbol.asClass) =>
56
+ case tpe @ SAMType (_) if ExpandSAMs .isPlatformSam(tpe.classSymbol.asClass) && ! definesNarrowedOverrides(tpe) =>
57
57
checkRefinements(tpe, fn)
58
58
tree
59
59
case tpe =>
@@ -66,6 +66,12 @@ class ExpandSAMs extends MiniPhase:
66
66
tree
67
67
}
68
68
69
+ private def definesNarrowedOverrides (tpe : Type )(using Context ): Boolean =
70
+ tpe.decls.exists { sym =>
71
+ val resultType = sym.info.resultType
72
+ sym.allOverriddenSymbols.exists(resultType <:< _.info.resultType)
73
+ }
74
+
69
75
/** A partial function literal:
70
76
*
71
77
* ```
Original file line number Diff line number Diff line change
1
+ trait Named :
2
+ def me : Named
3
+
4
+ trait Foo extends Named :
5
+ def me : Foo = this
6
+ def foo (x : String ): String
7
+
8
+ class Names (xs : List [Named ]):
9
+ def mkString = xs.map(_.me).mkString(" ," )
10
+
11
+ object Names :
12
+ def single [T <: Named ](t : T ): Names = Names (List (t))
13
+
14
+ @ main def Test () =
15
+ Names .single[Foo ](x => x).mkString
You can’t perform that action at this time.
0 commit comments