8148213: Regression: nested unchecked call does not trigger erasure of return type

FreeTypeListener was deferred too much and caused loss of unchecked warning while in the middle of overload

Reviewed-by: vromero
This commit is contained in:
Maurizio Cimadamore 2016-01-28 14:06:27 +00:00
parent 3cd2c2d034
commit 8aa9bf5cc6
3 changed files with 36 additions and 1 deletions

View File

@ -239,7 +239,7 @@ public class Attr extends JCTree.Visitor {
//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));

View File

@ -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);
}
}

View File

@ -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