blob: ccbf3446942e5cbf948b41149709f9824633b066 [file] [log] [blame]
import org.checkerframework.checker.lock.qual.GuardedBy;
public class NestedSynchronizedBlocks {
class MyClass {
public Object field;
}
@GuardedBy("lock1") MyClass m1;
@GuardedBy("lock2") MyClass m2;
@GuardedBy("lock3") MyClass m3;
@GuardedBy("lock4") MyClass m4;
final Object lock1 = new Object(),
lock2 = new Object(),
lock3 = new Object(),
lock4 = new Object();
void foo() {
synchronized (lock1) {
synchronized (lock2) {
synchronized (lock3) {
synchronized (lock4) {
}
}
}
}
// Test that the locks are known to have been released.
// :: error:(lock.not.held)
m1.field = new Object();
// :: error:(lock.not.held)
m2.field = new Object();
// :: error:(lock.not.held)
m3.field = new Object();
// :: error:(lock.not.held)
m4.field = new Object();
}
}