import java.lang.ref.WeakReference; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.List; import org.checkerframework.checker.regex.qual.*; class RawTypeTest { public void m1(Class<?> c) { Class<? extends I2> x = c.asSubclass(I2.class); new WeakReference<Object>(x); new WeakReference<Class>(x); new WeakReference<Class<? extends I2>>(x); new WeakReference<Object>(c.asSubclass(I2.class)); new WeakReference<Class>(c.asSubclass(I2.class)); new WeakReference<Class<? extends I2>>(c.asSubclass(I2.class)); } /* It would be desirable to optionally check the following code without * warnings. See issue 119: * * https://github.com/typetools/checker-framework/issues/119 * class Raw { public void m2(Class<Object> c) {} public void m3(Class c) { m2(c); } public void m4() { AccessController.doPrivileged(new PrivilegedAction() { public Object run() { return null; }}); } public void m5(List list, C4 c) { list.add(c); } public void m6(List list, long l) { list.add(l); } }*/ class NonRaw { public void m2(Class<Object> c) {} public void m3(Class<Object> c) { m2(c); } public void m4() { AccessController.doPrivileged( new PrivilegedAction<Object>() { public Object run() { return null; } }); } public void m5(List<C4> list, C4 c) { list.add(c); } public void m6(List<Long> list, long l) { list.add(l); } } class MyList<X extends @Regex String> { X f; } interface I1 { public void m(MyList<? extends @Regex String> l); } class C1 implements I1 { public void m(MyList par) { @Regex String xxx = par.f; } } interface I2 { public void m(MyList<@Regex String> l); } class C2 implements I2 { public void m(MyList<@Regex String> l) {} } class C3 implements I2 { //:: error: (override.param.invalid) :: error: (type.argument.type.incompatible) public void m(MyList<String> l) {} } class C4 {} }