import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.common.reflection.qual.MethodVal;

/** Example used in the reflection resolution section of the Checker Framework manual. */
public class NullnessReflectionExampleTest {
  @NonNull Location getCurrentLocation() {
    // ...
    return new Location();
  }

  String getCurrentCity()
      throws NoSuchMethodException, SecurityException, IllegalAccessException,
          IllegalArgumentException, InvocationTargetException {
    @MethodVal(
        className = "NullnessReflectionExampleTest",
        methodName = "getCurrentLocation",
        params = 0)
    Method toLowerCase = getClass().getMethod("getCurrentLocation");
    Location currentLocation = (Location) toLowerCase.invoke(this);
    return currentLocation.nameOfCity();
  }
}

class Location {
  String nameOfCity() {
    return "Seattle";
  }
}
