From 110f5e10adba8d7ee37cd30ca9d96ebc68fabf95 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 7 May 2015 16:47:27 +0200 Subject: [PATCH] IG: care for lambda's in"Field accessed in both synchronized and unsynchronized contexts" inspection --- .../src/com/siyeh/ig/threading/VariableAccessVisitor.java | 8 ++++++++ .../FieldAccessedSynchronizedAndUnsynchronized.java | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java index ccf65acb98df..e2f168608f1d 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/VariableAccessVisitor.java @@ -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); diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/field_accessed_synchronized_and_unsynchronized/FieldAccessedSynchronizedAndUnsynchronized.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/field_accessed_synchronized_and_unsynchronized/FieldAccessedSynchronizedAndUnsynchronized.java index 61e2e8a45bcd..1029047cff85 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/field_accessed_synchronized_and_unsynchronized/FieldAccessedSynchronizedAndUnsynchronized.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/threading/field_accessed_synchronized_and_unsynchronized/FieldAccessedSynchronizedAndUnsynchronized.java @@ -4,12 +4,14 @@ public class FieldAccessedSynchronizedAndUnsynchronized { private final Object m_lock = new Object(); private Object m_contents = new Object(); + private Object a; 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 object;