IG: care for lambda's in"Field accessed in both synchronized and unsynchronized contexts" inspection

This commit is contained in:
Bas Leijdekkers
2015-05-07 16:58:05 +02:00
parent e6ae1470d5
commit 110f5e10ad
2 changed files with 16 additions and 0 deletions
@@ -61,6 +61,14 @@ class VariableAccessVisitor extends JavaRecursiveElementVisitor {
m_inSynchronizedContext = wasInSync;
}
@Override
public void visitLambdaExpression(PsiLambdaExpression expression) {
final boolean wasInSync = m_inSynchronizedContext;
m_inSynchronizedContext = false;
super.visitLambdaExpression(expression);
m_inSynchronizedContext = wasInSync;
}
@Override
public void visitReferenceExpression(@NotNull PsiReferenceExpression ref) {
super.visitReferenceExpression(ref);
@@ -4,12 +4,14 @@ public class FieldAccessedSynchronizedAndUnsynchronized
{
private final Object m_lock = new Object();
private Object <warning descr="Field 'm_contents' is accessed in both synchronized and unsynchronized contexts">m_contents</warning> = new Object();
private Object <warning descr="Field 'a' is accessed in both synchronized and unsynchronized contexts">a</warning>;
public void foo()
{
synchronized(m_lock)
{
m_contents = new Object();
a = new Object();
}
getContents();
}
@@ -24,6 +26,12 @@ public class FieldAccessedSynchronizedAndUnsynchronized
getContents();
}
public synchronized void g() {
Runnable r = () -> {
System.out.println(a);
};
}
}
class Test {
private Object <warning descr="Field 'object' is accessed in both synchronized and unsynchronized contexts">object</warning>;