1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
import org.checkerframework.checker.initialization.qual.UnderInitialization;
import org.checkerframework.checker.initialization.qual.UnknownInitialization;
public class Subtyping {
void test1(
@UnknownInitialization(Object.class) Object unknownObject,
@UnderInitialization(Object.class) Object underObject,
@UnknownInitialization(Subtyping.class) Object unknownSubtyping,
@UnderInitialization(Subtyping.class) Object underSubtyping) {
// ::error: (assignment.type.incompatible)
underObject = unknownObject;
underObject = underSubtyping;
// ::error: (assignment.type.incompatible)
underObject = unknownSubtyping;
}
void test2(
@UnknownInitialization(Object.class) Object unknownObject,
@UnderInitialization(Object.class) Object underObject,
@UnknownInitialization(Subtyping.class) Object unknownSubtyping,
@UnderInitialization(Subtyping.class) Object underSubtyping) {
unknownObject = underSubtyping;
unknownObject = unknownSubtyping;
unknownObject = underObject;
}
void test3(
@UnknownInitialization(Object.class) Object unknownObject,
@UnderInitialization(Object.class) Object underObject,
@UnknownInitialization(Subtyping.class) Object unknownSubtyping,
@UnderInitialization(Subtyping.class) Object underSubtyping) {
// ::error: (assignment.type.incompatible)
underSubtyping = unknownObject;
// ::error: (assignment.type.incompatible)
underSubtyping = unknownSubtyping;
// ::error: (assignment.type.incompatible)
underSubtyping = underObject;
}
void test4(
@UnknownInitialization(Object.class) Object unknownObject,
@UnderInitialization(Object.class) Object underObject,
@UnknownInitialization(Subtyping.class) Object unknownSubtyping,
@UnderInitialization(Subtyping.class) Object underSubtyping) {
// ::error: (assignment.type.incompatible)
unknownSubtyping = unknownObject;
unknownSubtyping = underSubtyping;
// ::error: (assignment.type.incompatible)
unknownSubtyping = underObject;
}
}
|