8078592: Compiler fails to reject erroneous use of diamond with anonymous classes involving "fresh" type variables
Reviewed-by: mcimadamore
This commit is contained in:
parent
cbb7a567ca
commit
f2ee4e4240
@ -841,6 +841,15 @@ public class Check {
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Boolean visitTypeVar(TypeVar t, Void s) {
|
||||||
|
/* Any type variable mentioned in the inferred type must have been declared as a type parameter
|
||||||
|
(i.e cannot have been produced by capture conversion (5.1.10) or by inference (18.4)
|
||||||
|
*/
|
||||||
|
return t.tsym.owner.type.getTypeArguments().contains(t);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Boolean visitCapturedType(CapturedType t, Void s) {
|
public Boolean visitCapturedType(CapturedType t, Void s) {
|
||||||
return false;
|
return false;
|
||||||
|
36
langtools/test/tools/javac/generics/diamond/neg/Neg20.java
Normal file
36
langtools/test/tools/javac/generics/diamond/neg/Neg20.java
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* @test /nodynamiccopyright/
|
||||||
|
* @bug 8078592
|
||||||
|
* @summary Compiler fails to reject erroneous use of diamond with anonymous classes involving "fresh" type variables.
|
||||||
|
* @compile/fail/ref=Neg20.out Neg20.java -XDrawDiagnostics
|
||||||
|
*/
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
public class Neg20 {
|
||||||
|
static class Foo<E extends B<E>> {
|
||||||
|
public Foo<E> complexMethod(E a) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class Goo<@T E> {
|
||||||
|
public Goo<E> complexMethod(E a) {
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class B<V> {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Target(ElementType.TYPE_USE)
|
||||||
|
static @interface T {
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void check() {
|
||||||
|
Foo<?> t4 = new Foo<>() {
|
||||||
|
};
|
||||||
|
Goo<?> g4 = new Goo<>() {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,2 @@
|
|||||||
|
Neg20.java:31:28: compiler.err.cant.apply.diamond.1: (compiler.misc.diamond: Neg20.Foo), (compiler.misc.diamond.invalid.arg: E, (compiler.misc.diamond: Neg20.Foo))
|
||||||
|
1 error
|
Loading…
x
Reference in New Issue
Block a user