You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
112 lines
1.8 KiB
112 lines
1.8 KiB
/*
|
|
* Copyright (c) 2016-present, Facebook, Inc.
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
|
|
package codetoanalyze.java.infer;
|
|
|
|
import com.facebook.infer.annotation.ThreadSafe;
|
|
import com.google.common.annotations.VisibleForTesting;
|
|
import javax.annotation.concurrent.GuardedBy;
|
|
|
|
public class GuardedByTests {
|
|
private Object mlock = new Object();
|
|
|
|
@GuardedBy("mLock")
|
|
private int f;
|
|
|
|
public GuardedByTests() {
|
|
// don't warn on reads or writes of Guarded fields in constructor
|
|
f = 0;
|
|
}
|
|
|
|
public void unlockedWriteBad() {
|
|
f = 0;
|
|
}
|
|
|
|
public void lockedWriteOk() {
|
|
synchronized (mlock) {
|
|
f = 0;
|
|
}
|
|
}
|
|
|
|
public int unlockedReadBad() {
|
|
return f;
|
|
}
|
|
|
|
public int lockedReadOk() {
|
|
synchronized (mlock) {
|
|
return f;
|
|
}
|
|
}
|
|
|
|
private void privateUnlockedWriteOk() {
|
|
f = 0;
|
|
}
|
|
|
|
private int privateUnlockedReadOk() {
|
|
return f;
|
|
}
|
|
|
|
public void interprocUnlockedWriteBad() {
|
|
privateUnlockedWriteOk();
|
|
}
|
|
|
|
public int interprocUnlockedReadBad() {
|
|
return privateUnlockedReadOk();
|
|
}
|
|
|
|
// NB ThreadSafe annotation disables GuardedBy check too
|
|
@ThreadSafe(enableChecks = false)
|
|
int suppressedRead() {
|
|
return f;
|
|
}
|
|
|
|
@VisibleForTesting
|
|
public void visibleForTestingOk() {
|
|
f = 0;
|
|
}
|
|
|
|
static Object slock = new Object();
|
|
|
|
@GuardedBy("slock")
|
|
static int sf;
|
|
|
|
static {
|
|
// don't warn on class initializer
|
|
sf = 0;
|
|
}
|
|
|
|
@GuardedBy("this")
|
|
int g;
|
|
|
|
synchronized void syncWriteOk() {
|
|
g = 5;
|
|
}
|
|
|
|
synchronized int syncReadOk() {
|
|
return g;
|
|
}
|
|
|
|
GuardedByOther o;
|
|
|
|
void accessThroughMemberObjectOk() {
|
|
o.accessBad();
|
|
}
|
|
|
|
void accessIndirectOk(GuardedByOther o) {
|
|
o.accessBad();
|
|
}
|
|
}
|
|
|
|
class GuardedByOther {
|
|
@GuardedBy("bla")
|
|
int x;
|
|
|
|
void accessBad() {
|
|
x = 0;
|
|
}
|
|
}
|