import org.checkerframework.framework.testchecker.util.Critical;

/**
 * Tests the symantics for throwable exception.
 *
 * @on-hold
 * @skip-test
 */
abstract class ThrowCatch {

  void throwsNoncritical() throws Exception {
    throw new Exception();
  }

  void throwsCritical() throws @Critical Exception {
    throw new @Critical Exception();
  }

  void catches() {
    try {
      throwsNoncritical();
    } catch (Exception e) {
    }

    try {
      throwsNoncritical();
      // :: error: (type.incompatible)
    } catch (@Critical Exception e) {
    }

    try {
      throwsCritical();
    } catch (Exception e) {
    }

    try {
      throwsCritical();
    } catch (@Critical Exception e) {
    }
  }
}
