mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
SimplifyBooleanExpressionFix: preserve comments during simple replacement
This commit is contained in:
+5
-4
@@ -15,6 +15,7 @@ import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.controlFlow.AnalysisCanceledException;
|
||||
import com.intellij.psi.controlFlow.ControlFlowUtil;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiExpressionTrimRenderer;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
@@ -77,7 +78,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement {
|
||||
if (parent instanceof PsiDoWhileStatement) return "Unwrap 'do-while' statement";
|
||||
if (parent instanceof PsiForStatement) return "Remove 'for' statement";
|
||||
}
|
||||
return QuickFixBundle.message("simplify.boolean.expression.text", expression.getText(), constantValue);
|
||||
return QuickFixBundle.message("simplify.boolean.expression.text", PsiExpressionTrimRenderer.render(expression), constantValue);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -118,6 +119,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement {
|
||||
if (!isAvailable()) return;
|
||||
PsiExpression subExpression = getSubExpression();
|
||||
if (subExpression == null) return;
|
||||
CommentTracker ct = new CommentTracker();
|
||||
if (shouldExtractSideEffect()) {
|
||||
subExpression = RefactoringUtil.ensureCodeBlock(subExpression);
|
||||
if (subExpression == null) {
|
||||
@@ -130,6 +132,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement {
|
||||
return;
|
||||
}
|
||||
List<PsiExpression> sideEffects = SideEffectChecker.extractSideEffectExpressions(subExpression);
|
||||
sideEffects.forEach(ct::markUnchanged);
|
||||
PsiStatement[] statements = StatementExtractor.generateStatements(sideEffects, subExpression);
|
||||
if (statements.length > 0) {
|
||||
BlockUtils.addBefore(anchor, statements);
|
||||
@@ -139,9 +142,7 @@ public class SimplifyBooleanExpressionFix extends LocalQuickFixOnPsiElement {
|
||||
return;
|
||||
}
|
||||
}
|
||||
final PsiElementFactory factory = JavaPsiFacade.getElementFactory(project);
|
||||
final PsiExpression constExpression = factory.createExpressionFromText(Boolean.toString(mySubExpressionValue), subExpression);
|
||||
PsiExpression expression = (PsiExpression)subExpression.replace(constExpression);
|
||||
PsiExpression expression = (PsiExpression)ct.replaceAndRestoreComments(subExpression, Boolean.toString(mySubExpressionValue));
|
||||
while (expression.getParent() instanceof PsiExpression) {
|
||||
expression = (PsiExpression)expression.getParent();
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class SideEffectReturn {
|
||||
private boolean isValidValue(String value) {
|
||||
try {
|
||||
return <warning descr="Condition 'Test.valueOf(value) != null' is always 'true'">Test.valueOf(value) <caret>!= null</warning>;
|
||||
return <warning descr="Condition 'Test.valueOf(value/*oops*/) != null' is always 'true'">Test.valueOf(value/*oops*/<caret>) != null</warning>;
|
||||
} catch (IllegalArgumentException e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
class SideEffectReturn {
|
||||
private boolean isValidValue(String value) {
|
||||
try {
|
||||
Test.valueOf(value);
|
||||
Test.valueOf(value/*oops*/);
|
||||
return true;
|
||||
} catch (IllegalArgumentException e) {
|
||||
return false;
|
||||
|
||||
+3
-2
@@ -490,12 +490,12 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase {
|
||||
|
||||
public void testSideEffectReturn() {
|
||||
doTest();
|
||||
checkIntentionResult("Simplify 'Test.valueOf(value) != null' to true extracting side effects");
|
||||
checkIntentionResult("Simplify 'Test.valueOf(...) != null' to true extracting side effects");
|
||||
}
|
||||
|
||||
public void testSideEffectNoBrace() {
|
||||
doTest();
|
||||
checkIntentionResult("Simplify 'Test.valueOf(value) != null' to true extracting side effects");
|
||||
checkIntentionResult("Simplify 'Test.valueOf(...) != null' to true extracting side effects");
|
||||
}
|
||||
|
||||
public void testSimplifyConcatWithParentheses() {
|
||||
@@ -584,4 +584,5 @@ public class DataFlowInspectionTest extends DataFlowInspectionTestCase {
|
||||
public void testAdvancedArrayAccess() { doTest(); }
|
||||
public void testNullableGetterInLoop() { doTest(); }
|
||||
public void testNullabilityBasics() { doTest(); }
|
||||
public void testReassignedVarInLoop() { doTest(); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user