package a.b.c;

import org.checkerframework.checker.nullness.qual.*;

public class Issue752 {

  Issue752 field = new Issue752();
  static Issue752 staticField = new Issue752();

  Issue752 method() {
    return field;
  }

  static Issue752 staticMethod() {
    return staticField;
  }

  // A package name without a class name is not a valid JavaExpression string.
  @RequiresNonNull("java.lang")
  // :: error: (flowexpr.parse.error)
  void method1() {}

  @RequiresNonNull("java.lang.String.class")
  void method2() {}

  // A package name without a class name is not a valid JavaExpression string.
  @RequiresNonNull("a.b.c")
  // :: error: (flowexpr.parse.error)
  void method3() {}

  // notaclass does not exist.
  @RequiresNonNull("a.b.c.notaclass")
  // :: error: (flowexpr.parse.error)
  void method4() {}

  @RequiresNonNull("a.b.c.Issue752.class")
  void method5() {}

  @RequiresNonNull("a.b.c.Issue752.staticField")
  void method6() {}

  @RequiresNonNull("a.b.c.Issue752.staticField.field")
  void method7() {}

  // field is an instance field, and Issue752 is a class.
  @RequiresNonNull("a.b.c.Issue752.field")
  // :: error: (flowexpr.parse.error)
  void method8() {}

  // field is an instance field, and Issue752 is a class.
  @RequiresNonNull("a.b.c.Issue752.field.field")
  // :: error: (flowexpr.parse.error)
  void method9() {}

  @RequiresNonNull("a.b.c.Issue752.staticMethod()")
  void method10() {}

  @RequiresNonNull("a.b.c.Issue752.staticMethod().field")
  void method11() {}

  // method() is an instance method, and Issue752 is a class.
  @RequiresNonNull("a.b.c.Issue752.method()")
  // :: error: (flowexpr.parse.error)
  void method12() {}

  // method() is an instance method, and Issue752 is a class.
  @RequiresNonNull("a.b.c.Issue752.method().field")
  // :: error: (flowexpr.parse.error)
  void method13() {}
}
