// @skip-test // Test case for Issue 524: // https://github.com/typetools/checker-framework/issues/524 import java.util.concurrent.locks.ReentrantLock; import org.checkerframework.checker.lock.qual.GuardedBy; // WARNING: this test is nondeterministic, and has already been // minimized - if you modify it by removing what appears to be // redundant code, it may no longer reproduce the issue or provide // coverage for the issue after a fix for the issue has been made. // About the nondeterminism: // The desired behavior, with the fix for issue 524 in place, is for the test to type check without issuing any warnings. // (Notice that there are no expected warnings below.) // However even without a fix for issue 524 in place, the test sometimes type checks. // Unfortunately a test case that always fails to typecheck using a Checker Framework build // prior to the fix for issue 524 has not been found. class Issue524 { class MyClass { public Object field; } void testLocalVariables() { @GuardedBy({}) ReentrantLock localLock = new ReentrantLock(); { @GuardedBy("localLock") MyClass q = new MyClass(); localLock.lock(); localLock.lock(); // Without a fix for issue 524 in place, the error lock.not.held // (unguarded access to field, variable or parameter 'q' guarded by 'localLock') is issued for the following line. q.field.toString(); } } }