blob: 499c0ffe377f6d1aa8f345e474ce68b03a5c01e3 [file] [log] [blame]
import org.checkerframework.checker.nullness.qual.*;
public class AnnotatedTypeParams4 {
class Test1<CONTENT extends @Nullable Object> {
CONTENT a;
// To prevent the warning about un-initialized fields.
Test1(CONTENT p1) {
a = p1;
}
public CONTENT get() {
return a;
}
@org.checkerframework.dataflow.qual.Pure
public CONTENT get2() {
return a;
}
}
class Test2<CONTENT extends @Nullable Object> {
@NonNull CONTENT a;
// To prevent the warning about un-initialized fields.
Test2(@NonNull CONTENT p1) {
a = p1;
}
public @NonNull CONTENT get() {
return a;
}
@org.checkerframework.dataflow.qual.Pure
public @NonNull CONTENT get2() {
return a;
}
}
/*
class Test3<CONTENT extend @Nullable Object> {
// Change @Pure to be allowed on fields, or add some other anno.
@Pure CONTENT f;
// Strangely this assignment succeeded
Test3(CONTENT p1) { f = p1; }
// But this assignment failed, because the @Pure caused the
// other annotations to be erased.
public void get3(CONTENT p) {
f = p;
}
}
*/
class Test4<CONTENT extends @Nullable Object> {
private MyPair<CONTENT, CONTENT> userObject;
Test4(MyPair<CONTENT, CONTENT> p) {
userObject = p;
}
@org.checkerframework.dataflow.qual.Pure
public CONTENT getUserLeft() {
return userObject.a;
}
public class MyPair<T1 extends @Nullable Object, T2 extends @Nullable Object> {
public T1 a;
public T2 b;
public MyPair(T1 a, T2 b) {
this.a = a;
this.b = b;
}
}
}
}