blob: b20f2ed62f84b5ebed698d251789ad7df435bb03 [file] [log] [blame]
// 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.
public class Issue524 {
class MyClass {
public Object field;
}
void testLocalVariables() {
@GuardedBy({}) ReentrantLock localLock = new ReentrantLock();
{
// :: error: (lock.expression.not.final)
@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.
// :: error: (expression.unparsable)
q.field.toString();
}
}
}