import checkers.oigj.quals.*;
/**
* Simple tests to verify the receiver subtyping tests (a.k.a.
* invocability tests)
*
*/
class MethodInvocation {
void mutable() @Mutable {}
void immutable() @Immutable {}
void readOnly() @ReadOnly {}
void assignsFields() @AssignsFields {}
@ReadOnly MethodInvocation readonly;
@Mutable MethodInvocation mutable;
@Immutable MethodInvocation immutable;
void testReadOnly() {
readonly.readOnly();
mutable.readOnly();
immutable.readOnly();
}
void testMutable() {
//:: (method.invocation.invalid)
readonly.mutable();
mutable.mutable();
//:: (method.invocation.invalid)
immutable.mutable();
}
void testImmutable() {
//:: (method.invocation.invalid)
readonly.immutable();
//:: (method.invocation.invalid)
mutable.immutable();
immutable.immutable();
}
void testAssignsFields() {
//:: (method.invocation.invalid)
readonly.assignsFields();
mutable.assignsFields();
//:: (method.invocation.invalid)
immutable.assignsFields();
}
void selfReadOnly() @ReadOnly {
this.readOnly();
//:: (method.invocation.invalid)
this.mutable();
//:: (method.invocation.invalid)
this.immutable();
//:: (method.invocation.invalid)
this.assignsFields();
}
void selfMutable() @Mutable {
this.readOnly();
this.mutable();
//:: (method.invocation.invalid)
this.immutable();
this.assignsFields();
}
void selfImmutable() @Immutable {
this.readOnly();
//:: (method.invocation.invalid)
this.mutable();
this.immutable();
//:: (method.invocation.invalid)
this.assignsFields();
}
void selfAssignsFields() @AssignsFields {
this.readOnly();
//:: (method.invocation.invalid)
this.mutable();
//:: (method.invocation.invalid)
this.immutable();
this.assignsFields();
}
}