8148213: Regression: nested unchecked call does not trigger erasure of return type
Summary: FreeTypeListener was deferred too much and caused loss of unchecked warning while in the middle of overload
Reviewed-by: vromero
--- a/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Jan 28 17:41:52 2016 +0530
+++ b/langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Attr.java Thu Jan 28 14:06:27 2016 +0000
@@ -239,7 +239,7 @@
//this means we are dealing with a partially inferred poly expression
owntype = shouldCheck ? resultInfo.pt : found;
if (resultInfo.checkMode.installPostInferenceHook()) {
- inferenceContext.addFreeTypeListener(List.of(found, resultInfo.pt),
+ inferenceContext.addFreeTypeListener(List.of(found),
instantiatedContext -> {
ResultInfo pendingResult =
resultInfo.dup(inferenceContext.asInstType(resultInfo.pt));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/8148213/T8148213.java Thu Jan 28 14:06:27 2016 +0000
@@ -0,0 +1,30 @@
+/*
+ * @test /nodynamiccopyright/
+ * @bug 8148213
+ * @summary Regression: nested unchecked call does not trigger erasure of return type
+ *
+ * @compile/fail/ref=T8148213.out -Werror -Xlint:unchecked -XDrawDiagnostics T8148213.java
+ */
+
+abstract class T8148213 {
+
+ interface R<E> { }
+
+ interface Q<T> { }
+
+ interface T {
+ <E> Q<E> n(R<E> r);
+ }
+
+ abstract <T> T isA(Class<T> t);
+
+ abstract <T> S<T> w(T t);
+
+ interface S<T> {
+ S<T> t(T value);
+ }
+
+ void f(T t, Q<String> q) {
+ w(t.n(isA(R.class))).t(q);
+ }
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/langtools/test/tools/javac/generics/inference/8148213/T8148213.out Thu Jan 28 14:06:27 2016 +0000
@@ -0,0 +1,5 @@
+T8148213.java:28:14: compiler.warn.unchecked.meth.invocation.applied: kindname.method, n, T8148213.R<E>, T8148213.R, kindname.interface, T8148213.T
+T8148213.java:28:18: compiler.warn.prob.found.req: (compiler.misc.unchecked.assign), T8148213.R, T8148213.R<E>
+- compiler.err.warnings.and.werror
+1 error
+2 warnings