blob: c29315b40036edfbb51d4aa60da96f3a91954c4d [file] [log] [blame]
import org.checkerframework.framework.testchecker.util.*;
public abstract class MethodOverrides {
public abstract @Odd String method();
public abstract String methodSub();
public abstract void param(@Odd String s);
public abstract void paramSup(@Odd String s);
public abstract void receiver(@Odd MethodOverrides this);
public abstract void receiverSub(@Odd MethodOverrides this);
public static class SubclassA extends MethodOverrides {
public @Odd String method() {
// :: error: (assignment)
@Odd String s = "";
return s;
}
public @Odd String methodSub() {
// :: error: (assignment)
@Odd String s = "";
return s;
}
public void param(@Odd String s) {}
public void paramSup(String s) {}
public void receiver(@Odd SubclassA this) {}
public void receiverSub() {}
}
static class X {
<T> T @Odd [] method(T @Odd [] t) {
return null;
}
}
static class Y extends X {
@Override
<S> S @Odd [] method(S @Odd [] s) {
return null;
}
}
static class Z extends X {
@Override
// return type is an incorrect override, as it's a supertype
// :: error: (override.return)
<A> A[] method(A[] s) {
return null;
}
}
static class Z2 extends X {
@Override
// :: error: (override.return) :: error: (override.param)
<A> @Odd A[] method(@Odd A[] s) {
return null;
}
}
static class ClX<T> {
T @Odd [] method(T @Odd [] t) {
return null;
}
}
static class ClY<S> extends ClX<S> {
@Override
S @Odd [] method(S @Odd [] s) {
return null;
}
}
static class ClZ<S> extends ClX<S> {
@Override
// :: error: (override.return) :: error: (override.param)
@Odd S[] method(@Odd S[] s) {
return null;
}
}
// TODO others...
}