IdempotentLoopBodyInspection: ignore all control flow statements (IDEA-CR-25479)

This commit is contained in:
Tagir Valeev
2017-10-16 11:22:45 +07:00
parent 8ea5160175
commit ea5cdaff9f
@@ -24,7 +24,7 @@ public class IdempotentLoopBodyInspection extends AbstractBaseJavaLocalInspectio
if (condition == null || SideEffectChecker.mayHaveSideEffects(condition)) return;
PsiStatement body = loop.getBody();
if (body == null) return;
if (mayHaveUndesiredSideEffects(loop, body)) return;
if (mayHaveUndesiredSideEffects(body)) return;
final ControlFlow controlFlow;
try {
controlFlow =
@@ -44,7 +44,7 @@ public class IdempotentLoopBodyInspection extends AbstractBaseJavaLocalInspectio
PsiStatement body = loop.getBody();
if (body == null) return;
PsiStatement update = loop.getUpdate();
if (mayHaveUndesiredSideEffects(loop, body) || update != null && mayHaveUndesiredSideEffects(loop, update)) return;
if (mayHaveUndesiredSideEffects(body) || update != null && mayHaveUndesiredSideEffects(update)) return;
ControlFlow controlFlow;
try {
controlFlow =
@@ -70,12 +70,17 @@ public class IdempotentLoopBodyInspection extends AbstractBaseJavaLocalInspectio
}
}
private boolean mayHaveUndesiredSideEffects(PsiLoopStatement loop, @NotNull PsiElement element) {
return SideEffectChecker.mayHaveSideEffects(element, e -> isAcceptableSideEffect(loop, e));
private boolean mayHaveUndesiredSideEffects(@NotNull PsiElement element) {
return SideEffectChecker.mayHaveSideEffects(element, this::isAcceptableSideEffect);
}
private boolean isAcceptableSideEffect(PsiLoopStatement loop, PsiElement e) {
if (e instanceof PsiContinueStatement && ((PsiContinueStatement)e).findContinuedStatement() == loop) return true;
private boolean isAcceptableSideEffect(PsiElement e) {
if (e instanceof PsiContinueStatement ||
e instanceof PsiBreakStatement ||
e instanceof PsiReturnStatement ||
e instanceof PsiThrowStatement) {
return true;
}
if (e instanceof PsiLocalVariable) return true;
if (e instanceof PsiAssignmentExpression) {
PsiAssignmentExpression assignment = (PsiAssignmentExpression)e;