[java-intention] BreakConverter#process fixed

isRemovable must be called before any modifications. Otherwise, previous modifications may affect its results.

GitOrigin-RevId: d05be1e54ba62e5ac18003bf54dab2abb16124ce
This commit is contained in:
Tagir Valeev
2020-08-03 09:51:38 +00:00
committed by intellij-monorepo-bot
parent bd24e716a3
commit 9ca4341d7f
3 changed files with 46 additions and 5 deletions
@@ -0,0 +1,16 @@
// "Replace 'switch' with 'if'" "true"
class X {
void test(int x) {
if (x > 0) {
if (x == 1) {
if (Math.random() > 0.5) {
System.out.println(1);
} else {
}
} else if (x == 2) {
System.out.println(2);
}
}
System.out.println("Exit");
}
}
@@ -0,0 +1,20 @@
// "Replace 'switch' with 'if'" "true"
class X {
void test(int x) {
if (x > 0) {
swi<caret>tch (x) {
case 1:
if (Math.random() > 0.5) {
System.out.println(1);
break;
} else {
break;
}
case 2:
System.out.println(2);
break;
}
}
System.out.println("Exit");
}
}
@@ -4,11 +4,13 @@ package com.siyeh.ig.psiutils;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.siyeh.ig.fixes.DeleteUnnecessaryStatementFix;
import one.util.streamex.StreamEx;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* A class which converts switch statement breaks before switch statement
@@ -25,11 +27,14 @@ public class BreakConverter {
public void process() {
List<PsiBreakStatement> breaks = collectBreaks();
for (PsiBreakStatement breakStatement : breaks) {
if (isRemovable(mySwitchBlock, breakStatement)) {
DeleteUnnecessaryStatementFix.deleteUnnecessaryStatement(breakStatement);
} else {
assert myReplacement != null;
Map<Boolean, List<PsiBreakStatement>> groups =
StreamEx.of(breaks).partitioningBy(breakStatement -> isRemovable(mySwitchBlock, breakStatement));
List<PsiBreakStatement> removableBreaks = groups.get(true);
removableBreaks.forEach(DeleteUnnecessaryStatementFix::deleteUnnecessaryStatement);
List<PsiBreakStatement> replaceableBreaks = groups.get(false);
if (!replaceableBreaks.isEmpty()) {
assert myReplacement != null;
for (PsiBreakStatement breakStatement : replaceableBreaks) {
new CommentTracker().replaceAndRestoreComments(breakStatement, myReplacement);
}
}