import org.checkerframework.checker.lock.qual.*; public class Methods { final Object lock = new Object(); @Holding("lock") void lockedByLock() {} @Holding("this") void lockedByThis() {} // unguarded calls void unguardedCalls() { //:: error: (contracts.precondition.not.satisfied) lockedByLock(); // error //:: error: (contracts.precondition.not.satisfied) lockedByThis(); // error } @Holding("lock") void usingHolding1() { lockedByLock(); //:: error: (contracts.precondition.not.satisfied) lockedByThis(); // error } @Holding("this") void usingHolding2() { //:: error: (contracts.precondition.not.satisfied) lockedByLock(); // error lockedByThis(); } void usingSynchronization1() { synchronized (lock) { lockedByLock(); //:: error: (contracts.precondition.not.satisfied) lockedByThis(); // error } } void usingSynchronization2() { synchronized (this) { //:: error: (contracts.precondition.not.satisfied) lockedByLock(); // error lockedByThis(); } } synchronized void usingMethodModifier() { //:: error: (contracts.precondition.not.satisfied) lockedByLock(); // error lockedByThis(); } }