// 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();
    }
  }
}
