IDEA-158796 ("Scope of variable 'entries' is too broad" false positive)
authorBas Leijdekkers <basleijdekkers@gmail.com>
Thu, 15 Sep 2016 09:26:37 +0000 (11:26 +0200)
committerBas Leijdekkers <basleijdekkers@gmail.com>
Thu, 15 Sep 2016 09:27:24 +0000 (11:27 +0200)
plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/dataflow/TooBroadScopeInspectionBase.java
plugins/InspectionGadgets/test/com/siyeh/igtest/dataflow/scope/TooBroadScope.java

index 20e963d19d43b4a571d88c8588890568daac63bd..85df4d8c50004da867e319f4246b0a4ed56d34f6 100644 (file)
@@ -136,6 +136,9 @@ public class TooBroadScopeInspectionBase extends BaseInspection {
     if (expression instanceof PsiReferenceExpression) {
       final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)expression;
       final PsiElement target = referenceExpression.resolve();
+      if (target instanceof PsiClass) {
+        return true;
+      }
       if (!(target instanceof PsiVariable)) {
         return false;
       }
@@ -168,6 +171,11 @@ public class TooBroadScopeInspectionBase extends BaseInspection {
       if (!isAllowedMethod(method)) {
         return false;
       }
+      final PsiReferenceExpression methodExpression = methodCallExpression.getMethodExpression();
+      final PsiExpression qualifierExpression = methodExpression.getQualifierExpression();
+      if (qualifierExpression != null && !isMoveable(qualifierExpression)) {
+        return false;
+      }
       final PsiExpressionList argumentList = methodCallExpression.getArgumentList();
       for (PsiExpression argument : argumentList.getExpressions()){
         if (!isMoveable(argument)) {
index 6b45d6f66368417c775eee9ecce1662d745289f5..b2d31e3351fade1b0a8484ab7154d5298ca245dd 100644 (file)
@@ -198,4 +198,12 @@ public class TooBroadScope
         long end = System.currentTimeMillis();
         System.out.println("elapsed: " + (end - start));
     }
+
+    void m(HashMap<Integer, String> src) {
+        ArrayList<String> strings = new ArrayList<>(src.values());
+        src.clear();
+        for (String s : strings) {
+            System.out.println(s);
+        }
+    }
 }
\ No newline at end of file