mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-05-06 05:10:22 +07:00
[java-inspections] Delete switch branch when guard is false
Part of IDEA-326939 Support multi-pattern switch labels that define no variables GitOrigin-RevId: 6d089c7e9f705a28f29376f1208ed39d4c8aa881
This commit is contained in:
committed by
intellij-monorepo-bot
parent
efbff7c99c
commit
dbccf5f59b
@@ -8,9 +8,11 @@ import com.intellij.codeInsight.daemon.impl.analysis.HighlightControlFlowUtil;
|
||||
import com.intellij.codeInsight.intention.impl.SplitConditionUtil;
|
||||
import com.intellij.codeInspection.CommonQuickFixBundle;
|
||||
import com.intellij.codeInspection.dataFlow.NullabilityProblemKind;
|
||||
import com.intellij.codeInspection.dataFlow.fix.DeleteSwitchLabelFix;
|
||||
import com.intellij.codeInspection.util.IntentionFamilyName;
|
||||
import com.intellij.codeInspection.util.IntentionName;
|
||||
import com.intellij.java.JavaBundle;
|
||||
import com.intellij.java.analysis.JavaAnalysisBundle;
|
||||
import com.intellij.modcommand.ActionContext;
|
||||
import com.intellij.modcommand.ModPsiUpdater;
|
||||
import com.intellij.modcommand.Presentation;
|
||||
@@ -88,6 +90,9 @@ public class SimplifyBooleanExpressionFix extends PsiUpdateModCommandAction<PsiE
|
||||
CommonQuickFixBundle.message("fix.unwrap.statement", PsiKeyword.IF) :
|
||||
CommonQuickFixBundle.message("fix.remove.statement", PsiKeyword.IF);
|
||||
}
|
||||
if (parent instanceof PsiSwitchLabelStatementBase && !constantValue) {
|
||||
return JavaAnalysisBundle.message("remove.switch.label");
|
||||
}
|
||||
if (!constantValue) {
|
||||
if (parent instanceof PsiWhileStatement) return CommonQuickFixBundle.message("fix.remove.statement", PsiKeyword.WHILE);
|
||||
if (parent instanceof PsiDoWhileStatement) return CommonQuickFixBundle.message("fix.unwrap.statement", "do-while");
|
||||
@@ -357,12 +362,16 @@ public class SimplifyBooleanExpressionFix extends PsiUpdateModCommandAction<PsiE
|
||||
public static void simplifyExpression(PsiExpression expression) throws IncorrectOperationException {
|
||||
final PsiExpression result = createSimplifiedReplacement(expression);
|
||||
PsiExpression newExpression = (PsiExpression)new CommentTracker().replaceAndRestoreComments(expression, result);
|
||||
if (newExpression instanceof PsiLiteralExpression) {
|
||||
if (newExpression instanceof PsiLiteralExpression literal) {
|
||||
final PsiElement parent = newExpression.getParent();
|
||||
if (parent instanceof PsiAssertStatement && ((PsiLiteralExpression)newExpression).getValue() == Boolean.TRUE) {
|
||||
Object value = literal.getValue();
|
||||
if (parent instanceof PsiAssertStatement && Boolean.TRUE.equals(value)) {
|
||||
parent.delete();
|
||||
return;
|
||||
}
|
||||
if (parent instanceof PsiSwitchLabelStatementBase label && Boolean.FALSE.equals(value)) {
|
||||
DeleteSwitchLabelFix.deleteLabel(label);
|
||||
}
|
||||
}
|
||||
if (!simplifyIfOrLoopStatement(newExpression)) {
|
||||
ParenthesesUtils.removeParentheses(newExpression, false);
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
// "Remove switch label" "true-preview"
|
||||
class X {
|
||||
void test(Object obj) {
|
||||
switch (obj) {
|
||||
default:
|
||||
System.out.println("something else");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
// "Remove switch label" "true-preview"
|
||||
class X {
|
||||
void test(Object obj) {
|
||||
switch (obj) {
|
||||
case String s when s.length()<caret> < 0:
|
||||
System.out.println("oops");
|
||||
break;
|
||||
default:
|
||||
System.out.println("something else");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -5,8 +5,11 @@ import com.intellij.codeInsight.daemon.quickFix.LightQuickFixParameterizedTestCa
|
||||
import com.intellij.codeInspection.LocalInspectionTool;
|
||||
import com.intellij.codeInspection.dataFlow.ConstantValueInspection;
|
||||
import com.intellij.codeInspection.dataFlow.DataFlowInspection;
|
||||
import com.intellij.testFramework.LightProjectDescriptor;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import static com.intellij.testFramework.fixtures.LightJavaCodeInsightFixtureTestCase.JAVA_21;
|
||||
|
||||
public class SimplifyBooleanExpressionFixTest extends LightQuickFixParameterizedTestCase {
|
||||
|
||||
@Override
|
||||
@@ -14,6 +17,11 @@ public class SimplifyBooleanExpressionFixTest extends LightQuickFixParameterized
|
||||
return new LocalInspectionTool[]{new ConstantValueInspection()};
|
||||
}
|
||||
|
||||
@Override
|
||||
protected @NotNull LightProjectDescriptor getProjectDescriptor() {
|
||||
return JAVA_21;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getBasePath() {
|
||||
return "/codeInsight/daemonCodeAnalyzer/quickFix/simplifyBooleanExpressionFix";
|
||||
|
||||
Reference in New Issue
Block a user