import checkers.lock.quals.*; public class Methods { Object lock; @Holding("lock") void lockedByLock() { } @Holding("this") void lockedByThis() { } // unguarded calls void unguardedCalls() { //:: (unguarded.invocation) lockedByLock(); // error //:: (unguarded.invocation) lockedByThis(); // error } @Holding("lock") void usingHolding1() { lockedByLock(); //:: (unguarded.invocation) lockedByThis(); // error } @Holding("this") void usingHolding2() { //:: (unguarded.invocation) lockedByLock(); // error lockedByThis(); } void usingSynchronization1() { synchronized(lock) { lockedByLock(); //:: (unguarded.invocation) lockedByThis(); // error } } void usingSynchronization2() { synchronized(this) { //:: (unguarded.invocation) lockedByLock(); // error lockedByThis(); } } synchronized void usingMethodModifier() { //:: (unguarded.invocation) lockedByLock(); // error lockedByThis(); } }