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 * * @author smillst */ public class NullnessReflectionTest { @NonNull Object returnNonNull() { return new Object(); } void testReturnNonNull( @MethodVal( className = "NullnessReflectionTest", 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 = "NullnessReflectionTest", 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 = "NullnessReflectionTest", methodName = "paramAndReturnNonNullStatic", params = 2 ) Method m) throws Exception { @NonNull Object o1 = m.invoke(this, null, null); @NonNull Object o2 = m.invoke(null, null, null); } }