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
|
import java.lang.reflect.Method;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;
import org.checkerframework.common.reflection.qual.MethodVal;
/** Testing that reflection resolution uses more precise annotations for the Nullness Checker. */
public class NullnessReflectionResolutionTest {
@NonNull Object returnNonNull() {
return new Object();
}
void testReturnNonNull(
@MethodVal(
className = "NullnessReflectionResolutionTest",
methodName = "returnNonNull",
params = 0)
Method m)
throws Exception {
@NonNull Object o = m.invoke(this);
}
void paramNullable(@Nullable Object param1, @Nullable Object param2) {}
void testParamNullable(
@MethodVal(
className = "NullnessReflectionResolutionTest",
methodName = "paramNullable",
params = 2)
Method m)
throws Exception {
@NonNull Object o = m.invoke(this, null, null);
}
static @NonNull Object paramAndReturnNonNullStatic(
@Nullable Object param1, @Nullable Object param2) {
return new Object();
}
void testParamAndReturnNonNullStatic(
@MethodVal(
className = "NullnessReflectionResolutionTest",
methodName = "paramAndReturnNonNullStatic",
params = 2)
Method m)
throws Exception {
@NonNull Object o1 = m.invoke(this, null, null);
@NonNull Object o2 = m.invoke(null, null, null);
}
}
|