mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[java] handle empty statements in "'if' statement with identical branches" quick fix (IDEA-233980)
GitOrigin-RevId: 388e5c5195bda88b61526f0a393ed9d81ec18830
This commit is contained in:
committed by
intellij-monorepo-bot
parent
d270d7f4d5
commit
a8f1480bac
+33
-12
@@ -366,17 +366,38 @@ public final class IfStatementWithIdenticalBranchesInspection extends AbstractBa
|
||||
}
|
||||
PsiStatement[] thenStatements = ControlFlowUtils.unwrapBlock(ifStatement.getThenBranch());
|
||||
PsiStatement[] elseStatements = ControlFlowUtils.unwrapBlock(ifStatement.getElseBranch());
|
||||
int thenLength = thenStatements.length;
|
||||
int elseLength = elseStatements.length;
|
||||
for (int i = 0; i < tailStatements.size(); i++) {
|
||||
PsiStatement thenStatement = thenStatements[thenLength - 1 - i];
|
||||
// handling situation, when there is no braces around then branch
|
||||
if (thenStatements.length == 1 && thenStatement.getParent() == ifStatement) {
|
||||
thenStatement.replace(JavaPsiFacade.getElementFactory(thenStatement.getProject()).createCodeBlock());
|
||||
} else {
|
||||
thenStatement.delete();
|
||||
for (int i = thenStatements.length - 1; i >= 0; i--) {
|
||||
PsiStatement statement = thenStatements[i];
|
||||
if (!(statement instanceof PsiEmptyStatement)) break;
|
||||
//emptyStatementCount++;
|
||||
}
|
||||
if (thenStatements.length == 1 && thenStatements[0].getParent() == ifStatement) {
|
||||
thenStatements[0].replace(JavaPsiFacade.getElementFactory(ifStatement.getProject()).createCodeBlock());
|
||||
}
|
||||
else {
|
||||
deleteStatements(thenStatements, tailStatements.size(), ct, false);
|
||||
}
|
||||
deleteStatements(elseStatements, tailStatements.size(), ct, true);
|
||||
}
|
||||
}
|
||||
|
||||
private static void deleteStatements(PsiStatement[] statements, int count, CommentTracker ct, boolean keepComments) {
|
||||
for (int i = statements.length - 1; i >= 0; i--) {
|
||||
PsiStatement statement = statements[i];
|
||||
if (statement instanceof PsiEmptyStatement) {
|
||||
ct.delete(statement);
|
||||
}
|
||||
else if (count > 0) {
|
||||
count--;
|
||||
if (keepComments) {
|
||||
ct.delete(statement);
|
||||
}
|
||||
ct.delete(elseStatements[elseLength - 1 - i]);
|
||||
else {
|
||||
statement.delete();
|
||||
}
|
||||
}
|
||||
else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -776,12 +797,12 @@ public final class IfStatementWithIdenticalBranchesInspection extends AbstractBa
|
||||
final Map<PsiLocalVariable, String> mySubstitutionTable;
|
||||
|
||||
private ThenElse(List<ExtractionUnit> headUnitsOfThen,
|
||||
List<PsiStatement> tailUnitsOfThen,
|
||||
List<PsiStatement> tailStatementsOfThen,
|
||||
boolean mayChangeSemantics,
|
||||
CommonPartType commonPartType,
|
||||
Map<PsiLocalVariable, String> substitutionTable) {
|
||||
myHeadUnitsOfThen = headUnitsOfThen;
|
||||
myTailStatementsOfThen = tailUnitsOfThen;
|
||||
myTailStatementsOfThen = tailStatementsOfThen;
|
||||
myMayChangeSemantics = mayChangeSemantics;
|
||||
myCommonPartType = commonPartType;
|
||||
mySubstitutionTable = substitutionTable;
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
// "Extract common part removing branch" "true"
|
||||
|
||||
class EmptyStatements {
|
||||
|
||||
private void refactor() {
|
||||
if (new java.util.Random().nextBoolean()) {
|
||||
foo();
|
||||
}
|
||||
bar();
|
||||
}
|
||||
|
||||
private void foo() {}
|
||||
|
||||
private void bar() {}
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
// "Extract common part removing branch" "true"
|
||||
|
||||
class EmptyStatements {
|
||||
|
||||
private void refactor() {
|
||||
if<caret> (new java.util.Random().nextBoolean()) {
|
||||
foo();
|
||||
;;bar();;;;
|
||||
} else {
|
||||
bar();;
|
||||
}
|
||||
}
|
||||
|
||||
private void foo() {}
|
||||
|
||||
private void bar() {}
|
||||
}
|
||||
Reference in New Issue
Block a user