| import java.lang.ref.WeakReference; |
| import java.security.AccessController; |
| import java.security.PrivilegedAction; |
| import java.util.List; |
| import org.checkerframework.checker.regex.qual.*; |
| |
| public 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) :: error: (type.argument) |
| public void m(MyList<String> l) {} |
| } |
| |
| class C4 {} |
| } |