import org.checkerframework.framework.testchecker.testaccumulation.qual.*;

public class UnparsablePredicate {

  // :: error: predicate
  void unclosedOpen(@TestAccumulationPredicate("(foo && bar") Object x) {}

  // :: error: predicate
  void unopenedClose(@TestAccumulationPredicate("foo || bar)") Object x) {}

  // :: error: predicate
  void badKeywords1(@TestAccumulationPredicate("foo OR bar") Object x) {}

  // :: error: predicate
  void badKeywords2(@TestAccumulationPredicate("foo AND bar") Object x) {}

  // These tests check that valid java identifiers don't cause problems
  // when evaluating predicates. Examples of identifiers from
  // https://docs.oracle.com/javase/specs/jls/se8/html/jls-3.html#jls-3.8

  void jls0Example(@TestAccumulationPredicate("String") Object x) {}

  void callJls0Example(@TestAccumulation("String") Object y) {
    jls0Example(y);
  }

  void jls1Example(@TestAccumulationPredicate("i3") Object x) {}

  void callJls1Example(@TestAccumulation("i3") Object y) {
    jls1Example(y);
  }

  void jls2Example(@TestAccumulationPredicate("αρετη") Object x) {}

  void callJls2Example(@TestAccumulation("αρετη") Object y) {
    jls2Example(y);
  }

  void jls3Example(@TestAccumulationPredicate("MAX_VALUE") Object x) {}

  void callJls3Example(@TestAccumulation("MAX_VALUE") Object y) {
    jls3Example(y);
  }

  void jls4Example(@TestAccumulationPredicate("isLetterOrDigit") Object x) {}

  void callJls4Example(@TestAccumulation("isLetterOrDigit") Object y) {
    jls4Example(y);
  }
}
