8169091: Method reference T::methodName for generic type T does not compile any more
Summary: MethodReferenceLookupHelper should use original site to perform unbound subtype check
Reviewed-by: vromero
diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
index ae01e8f..f68f0fa 100644
--- a/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
+++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
@@ -3190,7 +3190,7 @@
if (TreeInfo.isStaticSelector(referenceTree.expr, names)) {
if (argtypes.nonEmpty() &&
(argtypes.head.hasTag(NONE) ||
- types.isSubtypeUnchecked(inferenceContext.asUndetVar(argtypes.head), site))) {
+ types.isSubtypeUnchecked(inferenceContext.asUndetVar(argtypes.head), originalSite))) {
return new UnboundMethodReferenceLookupHelper(referenceTree, name,
originalSite, argtypes, typeargtypes, maxPhase);
} else {
diff --git a/test/tools/javac/lambda/8169091/T8169091.java b/test/tools/javac/lambda/8169091/T8169091.java
new file mode 100644
index 0000000..9fe2ebd
--- /dev/null
+++ b/test/tools/javac/lambda/8169091/T8169091.java
@@ -0,0 +1,15 @@
+/*
+ * @test
+ * @bug 8169091
+ * @summary Method reference T::methodName for generic type T does not compile any more
+ * @compile T8169091.java
+ */
+
+import java.io.Serializable;
+import java.util.Comparator;
+
+interface T8169091 {
+ static <T extends Comparable<? super T>> Comparator<T> comparator() {
+ return (Comparator<T> & Serializable)T::compareTo;
+ }
+}