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:
parent
3cd2c2d034
commit
8aa9bf5cc6
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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
|
Loading…
x
Reference in New Issue
Block a user