diff --git a/compiler/src/dotty/tools/dotc/core/Types.scala b/compiler/src/dotty/tools/dotc/core/Types.scala index 8c6c641a5784..c11959e28645 100644 --- a/compiler/src/dotty/tools/dotc/core/Types.scala +++ b/compiler/src/dotty/tools/dotc/core/Types.scala @@ -3717,16 +3717,8 @@ object Types { case _ => NoType } - def isInstantiatable(tp: Type)(implicit ctx: Context): Boolean = zeroParamClass(tp) match { - case cinfo: ClassInfo => - val tref = tp.narrow - val selfType = cinfo.selfType.asSeenFrom(tref, cinfo.cls) - tref <:< selfType - case _ => - false - } def unapply(tp: Type)(implicit ctx: Context): Option[SingleDenotation] = - if (isInstantiatable(tp)) { + if (zeroParamClass(tp).exists) { val absMems = tp.abstractTermMembers // println(s"absMems: ${absMems map (_.show) mkString ", "}") if (absMems.size == 1) diff --git a/tests/pos/i2732.scala b/tests/pos/i2732.scala new file mode 100644 index 000000000000..f693bc6e2973 --- /dev/null +++ b/tests/pos/i2732.scala @@ -0,0 +1,8 @@ +object Foo { + // Example 1 + val fun: java.util.function.Function[String, _ <: String] = x => x + + // Example 2 + val map = new java.util.HashMap[String, String] + map.computeIfAbsent("hello", foo => "world") +}