blob: 0bd928cc35366c88e842de6b2a9852c164e0abab [file] [log] [blame]
import java.lang.reflect.Method;
import org.checkerframework.common.reflection.qual.MethodVal;
public class MethodValLUBTest {
Object unknown = null;
boolean flag = false;
@MethodVal(className = "c1", methodName = "m1", params = 0) Object c1m10 = null;
@MethodVal(className = "c2", methodName = "m2", params = 1) Object c2m21 = null;
void basicLub() {
if (flag) {
unknown = c1m10;
} else {
unknown = c2m21;
}
@MethodVal(
className = {"c1", "c2"},
methodName = {"m1", "m2"},
params = {0, 1})
Object lub = unknown;
// :: error: (assignment)
c1m10 = unknown;
// :: error: (assignment)
c2m21 = unknown;
}
@MethodVal(className = "c1", methodName = "m1", params = 0) Object c1m10duplicate = null;
void lubSameType() {
if (flag) {
unknown = c1m10;
} else {
unknown = c1m10duplicate;
}
@MethodVal(className = "c1", methodName = "m1", params = 0) Object lub = unknown;
}
@MethodVal(className = "c1", methodName = "m1", params = 1) Object c1m11 = null;
void simalarSigLub() {
if (flag) {
unknown = c1m10;
} else {
unknown = c1m11;
}
@MethodVal(
className = {"c1", "c1"},
methodName = {"m1", "m1"},
params = {0, 1})
Object lub = unknown;
// :: error: (assignment)
c1m10 = unknown;
// :: error: (assignment)
c1m11 = unknown;
}
@MethodVal(
className = {"class", "class2"},
methodName = {"method", "method2"},
params = {0, 1})
Object classClass2Method0 = null;
@MethodVal(
className = {"class2", "class"},
methodName = {"method", "method2"},
params = {0, 1})
Object class2classMethod0 = null;
void setsLub() {
if (flag) {
unknown = classClass2Method0;
} else {
unknown = class2classMethod0;
}
@MethodVal(
className = {"class2", "class", "class", "class2"},
methodName = {"method", "method2", "method", "method2"},
params = {0, 1, 0, 1})
Object lub = unknown;
// :: error: (assignment)
classClass2Method0 = unknown;
// :: error: (assignment)
class2classMethod0 = unknown;
}
void inferedlubTest() throws Exception {
Class<MethodValInferenceTest> c = MethodValInferenceTest.class;
Method m;
if (flag) {
m = c.getMethod("getA", new Class[0]);
} else {
m = c.getMethod("getB", new Class[0]);
}
@MethodVal(
className = {"MethodValInferenceTest", "MethodValInferenceTest"},
methodName = {"getA", "getB"},
params = {0, 0})
Method lub = m;
}
}