blob: 789b69b760ed6e75a6d09bca4556c9d9bdfaacf0 [file] [log] [blame]
import org.checkerframework.checker.calledmethods.qual.*;
public class CmPredicate {
void testOr1() {
MyClass m1 = new MyClass();
// :: error: method.invocation
m1.c();
}
void testOr2() {
MyClass m1 = new MyClass();
m1.a();
m1.c();
}
void testOr3() {
MyClass m1 = new MyClass();
m1.b();
m1.c();
}
void testAnd1() {
MyClass m1 = new MyClass();
// :: error: method.invocation
m1.d();
}
void testAnd2() {
MyClass m1 = new MyClass();
m1.a();
// :: error: method.invocation
m1.d();
}
void testAnd3() {
MyClass m1 = new MyClass();
m1.b();
// :: error: method.invocation
m1.d();
}
void testAnd4() {
MyClass m1 = new MyClass();
m1.a();
m1.c();
// :: error: method.invocation
m1.d();
}
void testAnd5() {
MyClass m1 = new MyClass();
m1.a();
m1.b();
m1.d();
}
void testAnd6() {
MyClass m1 = new MyClass();
m1.a();
m1.b();
m1.c();
m1.d();
}
void testAndOr1() {
MyClass m1 = new MyClass();
// :: error: method.invocation
m1.e();
}
void testAndOr2() {
MyClass m1 = new MyClass();
m1.a();
m1.e();
}
void testAndOr3() {
MyClass m1 = new MyClass();
m1.b();
// :: error: method.invocation
m1.e();
}
void testAndOr4() {
MyClass m1 = new MyClass();
m1.b();
m1.c();
m1.e();
}
void testAndOr5() {
MyClass m1 = new MyClass();
m1.a();
m1.b();
m1.c();
m1.d();
m1.e();
}
void testPrecedence1() {
MyClass m1 = new MyClass();
// :: error: method.invocation
m1.f();
}
void testPrecedence2() {
MyClass m1 = new MyClass();
m1.a();
// :: error: method.invocation
m1.f();
}
void testPrecedence3() {
MyClass m1 = new MyClass();
m1.b();
// :: error: method.invocation
m1.f();
}
void testPrecedence4() {
MyClass m1 = new MyClass();
m1.a();
m1.b();
m1.f();
}
void testPrecedence5() {
MyClass m1 = new MyClass();
m1.a();
m1.c();
m1.f();
}
void testPrecedence6() {
MyClass m1 = new MyClass();
m1.b();
m1.c();
m1.f();
}
private static class MyClass {
@CalledMethods("a") MyClass cmA;
@CalledMethodsPredicate("a") MyClass cmpA;
@CalledMethods({"a", "b"}) MyClass aB;
@CalledMethodsPredicate("a || b") MyClass aOrB;
@CalledMethodsPredicate("a && b") MyClass aAndB;
@CalledMethodsPredicate("a || b && c") MyClass bAndCOrA;
@CalledMethodsPredicate("a || (b && c)") MyClass bAndCOrAParens;
@CalledMethodsPredicate("a && b || c") MyClass aAndBOrC;
@CalledMethodsPredicate("(a && b) || c") MyClass aAndBOrCParens;
@CalledMethodsPredicate("(a || b) && c") MyClass aOrBAndC;
@CalledMethodsPredicate("a && (b || c)") MyClass bOrCAndA;
@CalledMethodsPredicate("b && c") MyClass bAndC;
@CalledMethodsPredicate("(b && c)") MyClass bAndCParens;
void a() {}
void b() {}
void c(@CalledMethodsPredicate("a || b") MyClass this) {}
void d(@CalledMethodsPredicate("a && b") MyClass this) {}
void e(@CalledMethodsPredicate("a || (b && c)") MyClass this) {}
void f(@CalledMethodsPredicate("a && b || c") MyClass this) {}
static void testAssignability1(@CalledMethodsPredicate("a || b") MyClass cAble) {
cAble.c();
// :: error: method.invocation
cAble.d();
// :: error: method.invocation
cAble.e();
// :: error: method.invocation
cAble.f();
}
static void testAssignability2(@CalledMethodsPredicate("a && b") MyClass dAble) {
// These calls would work if subtyping between predicates was by implication. They issue
// errors, because it is not.
// :: error: method.invocation
dAble.c();
dAble.d();
// :: error: method.invocation
dAble.e();
// :: error: method.invocation
dAble.f();
}
void testAllAssignability() {
@CalledMethods("a") MyClass cmALocal;
@CalledMethodsPredicate("a") MyClass cmpALocal;
@CalledMethodsPredicate("a || b") MyClass aOrBLocal;
@CalledMethods({"a", "b"}) MyClass aBLocal;
@CalledMethodsPredicate("a && b") MyClass aAndBLocal;
@CalledMethodsPredicate("a || b && c") MyClass bAndCOrALocal;
@CalledMethodsPredicate("a || (b && c)") MyClass bAndCOrAParensLocal;
@CalledMethodsPredicate("a && b || c") MyClass aAndBOrCLocal;
@CalledMethodsPredicate("(a && b) || c") MyClass aAndBOrCParensLocal;
@CalledMethodsPredicate("(a || b) && c") MyClass aOrBAndCLocal;
@CalledMethodsPredicate("a && (b || c)") MyClass bOrCAndALocal;
@CalledMethodsPredicate("b && c") MyClass bAndCLocal;
@CalledMethodsPredicate("(b && c)") MyClass bAndCParensLocal;
cmALocal = cmA;
cmALocal = cmpA;
// :: error: assignment
cmALocal = aOrB;
cmALocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
cmALocal = aAndB;
// :: error: assignment
cmALocal = bAndCOrA;
// :: error: assignment
cmALocal = bAndCOrAParens;
// :: error: assignment
cmALocal = aAndBOrC;
// :: error: assignment
cmALocal = aAndBOrCParens;
// :: error: assignment
cmALocal = aOrBAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
cmALocal = bOrCAndA;
// :: error: assignment
cmALocal = bAndC;
// :: error: assignment
cmALocal = bAndCParens;
cmpALocal = cmA;
cmpALocal = cmpA;
// :: error: assignment
cmpALocal = aOrB;
cmpALocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
cmpALocal = aAndB;
// :: error: assignment
cmpALocal = bAndCOrA;
// :: error: assignment
cmpALocal = bAndCOrAParens;
// :: error: assignment
cmpALocal = aAndBOrC;
// :: error: assignment
cmpALocal = aAndBOrCParens;
// :: error: assignment
cmpALocal = aOrBAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
cmpALocal = bOrCAndA;
// :: error: assignment
cmpALocal = bAndC;
// :: error: assignment
cmpALocal = bAndCParens;
aOrBLocal = cmA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = cmpA;
aOrBLocal = aOrB;
aOrBLocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = aAndB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = bAndCOrA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = bAndCOrAParens;
// :: error: assignment
aOrBLocal = aAndBOrC;
// :: error: assignment
aOrBLocal = aAndBOrCParens;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = aOrBAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = bOrCAndA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = bAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBLocal = bAndCParens;
// :: error: (assignment)
aBLocal = cmA;
// :: error: (assignment)
aBLocal = cmpA;
// :: error: (assignment)
aBLocal = aOrB;
aBLocal = aB;
aBLocal = aAndB;
// :: error: (assignment)
aBLocal = bAndCOrA;
// :: error: (assignment)
aBLocal = bAndCOrAParens;
// :: error: (assignment)
aBLocal = aAndBOrC;
// :: error: (assignment)
aBLocal = aAndBOrCParens;
// :: error: (assignment)
aBLocal = aOrBAndC;
// :: error: (assignment)
aBLocal = bOrCAndA;
// :: error: (assignment)
aBLocal = bAndC;
// :: error: (assignment)
aBLocal = bAndCParens;
// :: error: (assignment)
aAndBLocal = cmA;
// :: error: (assignment)
aAndBLocal = cmpA;
// :: error: (assignment)
aAndBLocal = aOrB;
aAndBLocal = aB;
aAndBLocal = aAndB;
// :: error: (assignment)
aAndBLocal = bAndCOrA;
// :: error: (assignment)
aAndBLocal = bAndCOrAParens;
// :: error: (assignment)
aAndBLocal = aAndBOrC;
// :: error: (assignment)
aAndBLocal = aAndBOrCParens;
// :: error: (assignment)
aAndBLocal = aOrBAndC;
// :: error: (assignment)
aAndBLocal = bOrCAndA;
// :: error: (assignment)
aAndBLocal = bAndC;
// :: error: (assignment)
aAndBLocal = bAndCParens;
bAndCOrALocal = cmA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrALocal = cmpA;
// :: error: (assignment)
bAndCOrALocal = aOrB;
bAndCOrALocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrALocal = aAndB;
bAndCOrALocal = bAndCOrA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrALocal = bAndCOrAParens;
// :: error: (assignment)
bAndCOrALocal = aAndBOrC;
// :: error: (assignment)
bAndCOrALocal = aAndBOrCParens;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrALocal = aOrBAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrALocal = bOrCAndA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrALocal = bAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrALocal = bAndCParens;
bAndCOrAParensLocal = cmA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrAParensLocal = cmpA;
// :: error: (assignment)
bAndCOrAParensLocal = aOrB;
bAndCOrAParensLocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrAParensLocal = aAndB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrAParensLocal = bAndCOrA;
bAndCOrAParensLocal = bAndCOrAParens;
// :: error: (assignment)
bAndCOrAParensLocal = aAndBOrC;
// :: error: (assignment)
bAndCOrAParensLocal = aAndBOrCParens;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrAParensLocal = aOrBAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrAParensLocal = bOrCAndA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrAParensLocal = bAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCOrAParensLocal = bAndCParens;
// :: error: (assignment)
aAndBOrCLocal = cmA;
// :: error: (assignment)
aAndBOrCLocal = cmpA;
// :: error: (assignment)
aAndBOrCLocal = aOrB;
aAndBOrCLocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCLocal = aAndB;
// :: error: (assignment)
aAndBOrCLocal = bAndCOrA;
// :: error: (assignment)
aAndBOrCLocal = bAndCOrAParens;
aAndBOrCLocal = aAndBOrC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCLocal = aAndBOrCParens;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCLocal = aOrBAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCLocal = bOrCAndA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCLocal = bAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCLocal = bAndCParens;
// :: error: (assignment)
aAndBOrCParensLocal = cmA;
// :: error: (assignment)
aAndBOrCParensLocal = cmpA;
// :: error: (assignment)
aAndBOrCParensLocal = aOrB;
aAndBOrCParensLocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCParensLocal = aAndB;
// :: error: (assignment)
aAndBOrCParensLocal = bAndCOrA;
// :: error: (assignment)
aAndBOrCParensLocal = bAndCOrAParens;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCParensLocal = aAndBOrC;
aAndBOrCParensLocal = aAndBOrCParens;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCParensLocal = aOrBAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCParensLocal = bOrCAndA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCParensLocal = bAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aAndBOrCParensLocal = bAndCParens;
// :: error: (assignment)
aOrBAndCLocal = cmA;
// :: error: (assignment)
aOrBAndCLocal = cmpA;
// :: error: (assignment)
aOrBAndCLocal = aOrB;
// :: error: (assignment)
aOrBAndCLocal = aB;
// :: error: (assignment)
aOrBAndCLocal = aAndB;
// :: error: (assignment)
aOrBAndCLocal = bAndCOrA;
// :: error: (assignment)
aOrBAndCLocal = bAndCOrAParens;
// :: error: (assignment)
aOrBAndCLocal = aAndBOrC;
// :: error: (assignment)
aOrBAndCLocal = aAndBOrCParens;
aOrBAndCLocal = aOrBAndC;
// :: error: (assignment)
aOrBAndCLocal = bOrCAndA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBAndCLocal = bAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
aOrBAndCLocal = bAndCParens;
// :: error: (assignment)
bOrCAndALocal = cmA;
// :: error: (assignment)
bOrCAndALocal = cmpA;
// :: error: (assignment)
bOrCAndALocal = aOrB;
bOrCAndALocal = aB;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bOrCAndALocal = aAndB;
// :: error: (assignment)
bOrCAndALocal = bAndCOrA;
// :: error: (assignment)
bOrCAndALocal = bAndCOrAParens;
// :: error: (assignment)
bOrCAndALocal = aAndBOrC;
// :: error: (assignment)
bOrCAndALocal = aAndBOrCParens;
// :: error: (assignment)
bOrCAndALocal = aOrBAndC;
bOrCAndALocal = bOrCAndA;
// :: error: (assignment)
bOrCAndALocal = bAndC;
// :: error: (assignment)
bOrCAndALocal = bAndCParens;
// :: error: (assignment)
bAndCLocal = cmA;
// :: error: (assignment)
bAndCLocal = cmpA;
// :: error: (assignment)
bAndCLocal = aOrB;
// :: error: (assignment)
bAndCLocal = aB;
// :: error: (assignment)
bAndCLocal = aAndB;
// :: error: (assignment)
bAndCLocal = bAndCOrA;
// :: error: (assignment)
bAndCLocal = bAndCOrAParens;
// :: error: (assignment)
bAndCLocal = aAndBOrC;
// :: error: (assignment)
bAndCLocal = aAndBOrCParens;
// :: error: (assignment)
bAndCLocal = aOrBAndC;
// :: error: (assignment)
bAndCLocal = bOrCAndA;
bAndCLocal = bAndC;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCLocal = bAndCParens;
// :: error: (assignment)
bAndCParensLocal = cmA;
// :: error: (assignment)
bAndCParensLocal = cmpA;
// :: error: (assignment)
bAndCParensLocal = aOrB;
// :: error: (assignment)
bAndCParensLocal = aB;
// :: error: (assignment)
bAndCParensLocal = aAndB;
// :: error: (assignment)
bAndCParensLocal = bAndCOrA;
// :: error: (assignment)
bAndCParensLocal = bAndCOrAParens;
// :: error: (assignment)
bAndCParensLocal = aAndBOrC;
// :: error: (assignment)
bAndCParensLocal = aAndBOrCParens;
// :: error: (assignment)
bAndCParensLocal = aOrBAndC;
// :: error: (assignment)
bAndCParensLocal = bOrCAndA;
// The next line would not fail if predicate subtyping was decided by implication.
// :: error: assignment
bAndCParensLocal = bAndC;
bAndCParensLocal = bAndCParens;
}
}
}