import checkers.oigj.quals.*; /** * Tests the immutability-part requirement of field assignability * */ public class Assignability { @Assignable Object assignable; Object nonAssignable; static @ReadOnly Assignability readOnly; static @Mutable Assignability mutable; static @Immutable Assignability immutable; void readOnly() @ReadOnly { this.assignable = null; //:: (assignability.invalid) this.nonAssignable = null; readOnly.assignable = null; //:: (assignability.invalid) readOnly.nonAssignable = null; mutable.assignable = null; mutable.nonAssignable = null; immutable.assignable = null; //:: (assignability.invalid) immutable.nonAssignable = null; } void mutable() @Mutable { this.assignable = null; this.nonAssignable = null; readOnly.assignable = null; //:: (assignability.invalid) readOnly.nonAssignable = null; mutable.assignable = null; mutable.nonAssignable = null; immutable.assignable = null; //:: (assignability.invalid) immutable.nonAssignable = null; } void assignsFields() @AssignsFields { this.assignable = null; this.nonAssignable = null; readOnly.assignable = null; //:: (assignability.invalid) readOnly.nonAssignable = null; mutable.assignable = null; mutable.nonAssignable = null; immutable.assignable = null; //:: (assignability.invalid) immutable.nonAssignable = null; } void immutable() @Immutable { this.assignable = null; //:: (assignability.invalid) this.nonAssignable = null; readOnly.assignable = null; //:: (assignability.invalid) readOnly.nonAssignable = null; mutable.assignable = null; mutable.nonAssignable = null; immutable.assignable = null; //:: (assignability.invalid) immutable.nonAssignable = null; } }