mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
preserve comments: if may be conditional
This commit is contained in:
+20
-15
@@ -25,6 +25,7 @@ import com.siyeh.ig.BaseInspection;
|
||||
import com.siyeh.ig.BaseInspectionVisitor;
|
||||
import com.siyeh.ig.InspectionGadgetsFix;
|
||||
import com.siyeh.ig.PsiReplacementUtil;
|
||||
import com.siyeh.ig.psiutils.CommentTracker;
|
||||
import com.siyeh.ig.psiutils.ControlFlowUtils;
|
||||
import com.siyeh.ig.psiutils.EquivalenceChecker;
|
||||
import com.siyeh.ig.psiutils.ParenthesesUtils;
|
||||
@@ -84,19 +85,20 @@ public class IfMayBeConditionalInspection extends BaseInspection {
|
||||
final PsiStatement elseBranch = ifStatement.getElseBranch();
|
||||
final PsiStatement elseStatement = ControlFlowUtils.stripBraces(elseBranch);
|
||||
final PsiExpression condition = ifStatement.getCondition();
|
||||
CommentTracker tracker = new CommentTracker();
|
||||
@NonNls final StringBuilder replacementText = new StringBuilder();
|
||||
if (thenStatement instanceof PsiReturnStatement) {
|
||||
final PsiReturnStatement elseReturn = (PsiReturnStatement)elseStatement;
|
||||
final PsiReturnStatement thenReturn = (PsiReturnStatement)thenStatement;
|
||||
replacementText.append("return ");
|
||||
appendExpressionText(condition, replacementText);
|
||||
appendExpressionText(condition, replacementText, tracker);
|
||||
replacementText.append('?');
|
||||
final PsiExpression thenReturnValue = thenReturn.getReturnValue();
|
||||
appendExpressionText(thenReturnValue, replacementText);
|
||||
appendExpressionText(thenReturnValue, replacementText, tracker);
|
||||
replacementText.append(':');
|
||||
if (elseReturn != null) {
|
||||
final PsiExpression elseReturnValue = elseReturn.getReturnValue();
|
||||
appendExpressionText(elseReturnValue, replacementText);
|
||||
appendExpressionText(elseReturnValue, replacementText, tracker);
|
||||
}
|
||||
replacementText.append(';');
|
||||
}
|
||||
@@ -108,24 +110,24 @@ public class IfMayBeConditionalInspection extends BaseInspection {
|
||||
if (thenExpression instanceof PsiAssignmentExpression && elseExpression instanceof PsiAssignmentExpression) {
|
||||
final PsiAssignmentExpression thenAssignmentExpression = (PsiAssignmentExpression)thenExpression;
|
||||
final PsiExpression lhs = thenAssignmentExpression.getLExpression();
|
||||
replacementText.append(lhs.getText());
|
||||
replacementText.append(tracker.markUnchanged(lhs).getText());
|
||||
final PsiJavaToken token = thenAssignmentExpression.getOperationSign();
|
||||
replacementText.append(token.getText());
|
||||
appendExpressionText(condition, replacementText);
|
||||
appendExpressionText(condition, replacementText, tracker);
|
||||
replacementText.append('?');
|
||||
final PsiExpression thenRhs = thenAssignmentExpression.getRExpression();
|
||||
appendExpressionText(thenRhs, replacementText);
|
||||
appendExpressionText(thenRhs, replacementText, tracker);
|
||||
replacementText.append(':');
|
||||
final PsiAssignmentExpression elseAssignmentExpression = (PsiAssignmentExpression)elseExpression;
|
||||
final PsiExpression elseRhs = elseAssignmentExpression.getRExpression();
|
||||
appendExpressionText(elseRhs, replacementText);
|
||||
appendExpressionText(elseRhs, replacementText, tracker);
|
||||
replacementText.append(';');
|
||||
}
|
||||
else if (thenExpression instanceof PsiMethodCallExpression && elseExpression instanceof PsiMethodCallExpression) {
|
||||
final PsiMethodCallExpression thenMethodCallExpression = (PsiMethodCallExpression)thenExpression;
|
||||
final PsiMethodCallExpression elseMethodCallExpression = (PsiMethodCallExpression)elseExpression;
|
||||
final PsiReferenceExpression thenMethodExpression = thenMethodCallExpression.getMethodExpression();
|
||||
replacementText.append(thenMethodExpression.getText());
|
||||
replacementText.append(tracker.markUnchanged(thenMethodExpression).getText());
|
||||
replacementText.append('(');
|
||||
final PsiExpressionList thenArgumentList = thenMethodCallExpression.getArgumentList();
|
||||
final PsiExpression[] thenArguments = thenArgumentList.getExpressions();
|
||||
@@ -138,14 +140,14 @@ public class IfMayBeConditionalInspection extends BaseInspection {
|
||||
final PsiExpression thenArgument = thenArguments[i];
|
||||
final PsiExpression elseArgument = elseArguments[i];
|
||||
if (EquivalenceChecker.getCanonicalPsiEquivalence().expressionsAreEquivalent(thenArgument, elseArgument)) {
|
||||
replacementText.append(thenArgument.getText());
|
||||
replacementText.append(tracker.markUnchanged(thenArgument).getText());
|
||||
}
|
||||
else {
|
||||
appendExpressionText(condition, replacementText);
|
||||
appendExpressionText(condition, replacementText, tracker);
|
||||
replacementText.append('?');
|
||||
appendExpressionText(thenArgument, replacementText);
|
||||
appendExpressionText(thenArgument, replacementText, tracker);
|
||||
replacementText.append(':');
|
||||
appendExpressionText(elseArgument, replacementText);
|
||||
appendExpressionText(elseArgument, replacementText, tracker);
|
||||
}
|
||||
}
|
||||
replacementText.append(");");
|
||||
@@ -154,15 +156,18 @@ public class IfMayBeConditionalInspection extends BaseInspection {
|
||||
return;
|
||||
}
|
||||
}
|
||||
PsiReplacementUtil.replaceStatement(ifStatement, replacementText.toString());
|
||||
|
||||
PsiReplacementUtil.replaceStatement(ifStatement, replacementText.toString(), tracker);
|
||||
}
|
||||
|
||||
private static void appendExpressionText(@Nullable PsiExpression expression, StringBuilder out) {
|
||||
private static void appendExpressionText(@Nullable PsiExpression expression,
|
||||
StringBuilder out,
|
||||
CommentTracker tracker) {
|
||||
expression = ParenthesesUtils.stripParentheses(expression);
|
||||
if (expression == null) {
|
||||
return;
|
||||
}
|
||||
final String expressionText = expression.getText();
|
||||
final String expressionText = tracker.markUnchanged(expression).getText();
|
||||
if (ParenthesesUtils.getPrecedence(expression) > ParenthesesUtils.CONDITIONAL_PRECEDENCE) {
|
||||
out.append('(');
|
||||
out.append(expressionText);
|
||||
|
||||
+8
@@ -0,0 +1,8 @@
|
||||
class Test {
|
||||
|
||||
String foo(){
|
||||
// Handling properties of the object
|
||||
// Handling ivar-s
|
||||
return child instanceof KeyedValue ? "(id)" : "(" + myValue.getEvaluationExpression(true) + ")->" + child.getName();
|
||||
}
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
class Test {
|
||||
|
||||
String foo(){
|
||||
i<caret>f (child instanceof KeyedValue) {
|
||||
// Handling properties of the object
|
||||
return "(id)";
|
||||
}
|
||||
else {
|
||||
// Handling ivar-s
|
||||
return "(" + myValue.getEvaluationExpression(true) + ")->" + child.getName();
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
* Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
*/
|
||||
package com.siyeh.ig.fixes.controlflow;
|
||||
|
||||
import com.siyeh.InspectionGadgetsBundle;
|
||||
import com.siyeh.ig.IGQuickFixesTestCase;
|
||||
import com.siyeh.ig.controlflow.IfMayBeConditionalInspection;
|
||||
|
||||
public class IfMayBeConditionalFixTest extends IGQuickFixesTestCase {
|
||||
|
||||
@Override
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
myFixture.enableInspections(new IfMayBeConditionalInspection());
|
||||
myRelativePath = "controlflow/if_conditional";
|
||||
myDefaultHint = InspectionGadgetsBundle.message("if.may.be.conditional.quickfix");
|
||||
}
|
||||
|
||||
public void testComment() { doTest(); }
|
||||
}
|
||||
Reference in New Issue
Block a user