class A {
private String color = "red";
private Object lockObj = new Object();
private A a = new A();
private B b = new B();
private void doSomething() {
synchronized (color) { // Noncompliant [[sc=19;ec=24]] {{Don't synchronize on "color" or remove its reassignment on line 10.}}
color = "green";
}
synchronized (lockObj) { // Compliant
color = "green";
}
synchronized (lockObj) { // Compliant
String[] array = new String[4];
array[0] = color;
}
synchronized (b) { // Noncompliant {{Don't synchronize on "b" or remove its reassignment on line 23.}}
b = new B();
}
synchronized (this.color) { // Noncompliant {{Don't synchronize on "color" or remove its reassignment on line 27.}}
color = "green";
}
synchronized (color) { // Noncompliant {{Don't synchronize on "color" or remove its reassignment on line 31.}}
this.color = "green";
}
synchronized (this.b.val) { // Noncompliant {{Don't synchronize on "val" or remove its reassignment on line 35.}}
b.val = foo();
}
synchronized (b.val) { // Noncompliant {{Don't synchronize on "val" or remove its reassignment on line 39.}}
this.b.val = foo();
}
synchronized (a.b.val) { // Noncompliant {{Don't synchronize on "val" or remove its reassignment on line 43.}}
this.a.b.val = foo();
}
synchronized (this.a.b.val) { // Noncompliant {{Don't synchronize on "val" or remove its reassignment on line 47.}}
a.b.val = foo();
}
synchronized (Integer.valueOf(42)) { // Compliant
color = "green";
}
String tmp = "tst";
synchronized (tmp) { // Compliant
tmp = "tmp";
}
B b2 = new B();
synchronized (b2.val) { // Compliant
b2.val = foo();
}
synchronized (new A().color) { // Compliant
color = "yellow";
}
synchronized (a.getB().val) { // Compliant
a.getB().val = foo();
}
synchronized (this.thing) { // Compliant - thing is unknown
b = new B();
}
synchronized (a.b.thing) { // Compliant - thing is unknown
a.b.thing = "test";
}
}
Integer foo() {
return Integer.valueOf(0);
}
B getB() {
return b;
}
}
class B {
public Integer val = 0;
public Integer foo() {
return Integer.valueOf(0);
}
}