| import org.checkerframework.common.reflection.qual.ClassBound; |
| import org.checkerframework.common.reflection.qual.ClassVal; |
| |
| public class GLBTest<@ClassVal({"A", "B"}) T extends Object> { |
| // This code is intented to cover the more complex branchs for the GLB calcuation. |
| // This only triggers the GLB calculation because of a hack in |
| // org.checkerframework.framework.util.AnnotatedTypes.addAnnotationsImpl() |
| // If that code changes, this code may not test GLB anymore. |
| // This code does not test correctness. Because no expresion is given the GLB as a type, |
| // it is impossible to test GLB for correctness. |
| // :: error: (type.argument) :: error: (assignment) |
| GLBTest<@ClassVal({"A", "B", "C"}) ?> f1 = new GLBTest<@ClassVal({"A", "E"}) Object>(); |
| // :: error: (type.argument) :: error: (assignment) |
| GLBTest<@ClassVal({"A", "B", "C"}) ?> f2 = new GLBTest<@ClassBound({"A", "E"}) Object>(); |
| // :: error: (type.argument) :: error: (assignment) |
| GLBTest<@ClassBound({"A", "B", "C"}) ?> f3 = new GLBTest<@ClassBound({"A", "E"}) Object>(); |
| |
| < |
| @ClassVal({"A", "B", "C"}) CLASSVAL extends Object, |
| @ClassBound({"A", "B", "C"}) CLASSBOUND extends Object> |
| void test() { |
| GLBTest<?> f1 = new GLBTest<CLASSVAL>(); |
| GLBTest<?> f2 = new GLBTest<CLASSBOUND>(); |
| } |
| } |