diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/ExcessiveRangeCheckInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/ExcessiveRangeCheckInspection.java
index 13b63d77a0d8..a0ac13547234 100644
--- a/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/ExcessiveRangeCheckInspection.java
+++ b/plugins/InspectionGadgets/src/com/siyeh/ig/controlflow/ExcessiveRangeCheckInspection.java
@@ -16,10 +16,7 @@ import com.intellij.util.ObjectUtils;
import com.intellij.util.containers.ContainerUtil;
import com.siyeh.InspectionGadgetsBundle;
import com.siyeh.ig.callMatcher.CallMatcher;
-import com.siyeh.ig.psiutils.BoolUtils;
-import com.siyeh.ig.psiutils.CommentTracker;
-import com.siyeh.ig.psiutils.EquivalenceChecker;
-import com.siyeh.ig.psiutils.JavaPsiMathUtil;
+import com.siyeh.ig.psiutils.*;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
@@ -81,7 +78,7 @@ public class ExcessiveRangeCheckInspection extends AbstractBaseJavaLocalInspecti
}
if (expression instanceof PsiMethodCallExpression) {
PsiExpression qualifier = ((PsiMethodCallExpression)expression).getMethodExpression().getQualifierExpression();
- if (qualifier != null) {
+ if (qualifier != null && !SideEffectChecker.mayHaveSideEffects(qualifier)) {
if (STRING_IS_EMPTY.matches(expression)) {
return new RangeConstraint(textRange, qualifier, SpecialField.STRING_LENGTH, LongRangeSet.point(0));
}
@@ -172,7 +169,7 @@ public class ExcessiveRangeCheckInspection extends AbstractBaseJavaLocalInspecti
}
}
- @NotNull
+ @Nullable
static RangeConstraint create(TextRange textRange, PsiExpression expr, LongRangeSet set) {
SpecialField field = null;
PsiReferenceExpression ref = expr instanceof PsiReferenceExpression ? (PsiReferenceExpression)expr :
@@ -186,6 +183,9 @@ public class ExcessiveRangeCheckInspection extends AbstractBaseJavaLocalInspecti
}
}
}
+ if (SideEffectChecker.mayHaveSideEffects(expr)) {
+ return null;
+ }
return new RangeConstraint(textRange, expr, field, set);
}
}
diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/excessive_range_check/ExcessiveRangeCheck.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/excessive_range_check/ExcessiveRangeCheck.java
index b7a836f639b9..f466c43c200d 100644
--- a/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/excessive_range_check/ExcessiveRangeCheck.java
+++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/controlflow/excessive_range_check/ExcessiveRangeCheck.java
@@ -35,5 +35,13 @@ class ExcessiveRangeCheck {
if(map.size() == 0 || map.size() == 1 || map.size() > 2) {}
if(map.isEmpty() || map.size() > 1) {}
}
+
+ public void testSideEffect() {
+ if (get() == 0 && get() == 0) {
+
+ }
+ }
+
+ native int get();
}
\ No newline at end of file