From 66e83ed9aeae48411fa16d082ed2fe968a57632f Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Fri, 20 Feb 2015 16:27:34 +0100 Subject: [PATCH] do not get through class/lambda during detection of container sync (IDEA-136805) --- .../SleepWhileHoldingLockInspection.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SleepWhileHoldingLockInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SleepWhileHoldingLockInspection.java index a6d67a938aaa..ee8a136d8ed6 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SleepWhileHoldingLockInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/threading/SleepWhileHoldingLockInspection.java @@ -45,9 +45,7 @@ public class SleepWhileHoldingLockInspection extends BaseInspection { return new SleepWhileHoldingLockVisitor(); } - private static class SleepWhileHoldingLockVisitor - extends BaseInspectionVisitor { - + private static class SleepWhileHoldingLockVisitor extends BaseInspectionVisitor { @Override public void visitMethodCallExpression( @NotNull PsiMethodCallExpression expression) { @@ -59,16 +57,14 @@ public class SleepWhileHoldingLockInspection extends BaseInspection { if (!"sleep".equals(methodName)) { return; } - final PsiMethod containingMethod = - PsiTreeUtil.getParentOfType(expression, PsiMethod.class); + final PsiMethod containingMethod = + PsiTreeUtil.getParentOfType(expression, PsiMethod.class, true, PsiClass.class, PsiLambdaExpression.class); boolean isSynced = false; - if (containingMethod != null && containingMethod - .hasModifierProperty(PsiModifier.SYNCHRONIZED)) { + if (containingMethod != null && containingMethod.hasModifierProperty(PsiModifier.SYNCHRONIZED)) { isSynced = true; } - final PsiSynchronizedStatement containingSyncStatement = - PsiTreeUtil.getParentOfType(expression, - PsiSynchronizedStatement.class); + final PsiSynchronizedStatement containingSyncStatement = + PsiTreeUtil.getParentOfType(expression, PsiSynchronizedStatement.class, true, PsiClass.class, PsiLambdaExpression.class); if (containingSyncStatement != null) { isSynced = true; } @@ -81,8 +77,7 @@ public class SleepWhileHoldingLockInspection extends BaseInspection { } final PsiClass methodClass = method.getContainingClass(); if (methodClass == null || - !InheritanceUtil.isInheritor(methodClass, - "java.lang.Thread")) { + !InheritanceUtil.isInheritor(methodClass, "java.lang.Thread")) { return; } registerMethodCallError(expression);