mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
replace conditional with if else: fix with variable and array initializer
This commit is contained in:
+19
-3
@@ -15,11 +15,14 @@
|
||||
*/
|
||||
package com.siyeh.ipp.conditional;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.codeStyle.CodeStyleManager;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.siyeh.ig.psiutils.ParenthesesUtils;
|
||||
import com.siyeh.ipp.base.Intention;
|
||||
@@ -29,6 +32,8 @@ import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public class ReplaceConditionalWithIfIntention extends Intention {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance("#" + ReplaceConditionalWithIfIntention.class.getName());
|
||||
|
||||
@Override
|
||||
@NotNull
|
||||
public PsiElementPredicate getElementPredicate() {
|
||||
@@ -53,8 +58,8 @@ public class ReplaceConditionalWithIfIntention extends Intention {
|
||||
else {
|
||||
variable = null;
|
||||
}
|
||||
final PsiExpression thenExpression = expression.getThenExpression();
|
||||
final PsiExpression elseExpression = expression.getElseExpression();
|
||||
PsiExpression thenExpression = expression.getThenExpression();
|
||||
PsiExpression elseExpression = expression.getElseExpression();
|
||||
final PsiExpression condition = expression.getCondition();
|
||||
final PsiExpression strippedCondition = ParenthesesUtils.stripParentheses(condition);
|
||||
final StringBuilder newStatement = new StringBuilder();
|
||||
@@ -67,10 +72,21 @@ public class ReplaceConditionalWithIfIntention extends Intention {
|
||||
final String name = variable.getName();
|
||||
newStatement.append(name);
|
||||
newStatement.append('=');
|
||||
final PsiExpression initializer = variable.getInitializer();
|
||||
PsiExpression initializer = variable.getInitializer();
|
||||
if (initializer == null) {
|
||||
return;
|
||||
}
|
||||
if (initializer instanceof PsiArrayInitializerExpression) {
|
||||
final int conditionIdx = ArrayUtilRt.find(((PsiArrayInitializerExpression)initializer).getInitializers(), expression);
|
||||
if (conditionIdx >= 0) {
|
||||
initializer = (PsiExpression)initializer.replace(RefactoringUtil.convertInitializerToNormalExpression(initializer, variable.getType()));
|
||||
final PsiArrayInitializerExpression arrayInitializer = ((PsiNewExpression)initializer).getArrayInitializer();
|
||||
LOG.assertTrue(arrayInitializer != null, initializer.getText());
|
||||
expression = (PsiConditionalExpression)arrayInitializer.getInitializers()[conditionIdx];
|
||||
thenExpression = expression.getThenExpression();
|
||||
elseExpression = expression.getElseExpression();
|
||||
}
|
||||
}
|
||||
appendElementTextWithoutParentheses(initializer, expression, thenExpression, newStatement);
|
||||
newStatement.append("; else ");
|
||||
newStatement.append(name);
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
class Test {
|
||||
void f(boolean b){
|
||||
String [] s = {b <caret>? "a" : "c"};
|
||||
}
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
class Test {
|
||||
void f(boolean b){
|
||||
String [] s;
|
||||
if (b) s = new String[]{"a"};
|
||||
else s = new String[]{"c"};
|
||||
}
|
||||
}
|
||||
+1
@@ -28,6 +28,7 @@ public class ReplaceConditionalWithIfTest extends IPPTestCase {
|
||||
public void testParentheses() { doTest(); }
|
||||
public void testConditionalInIf() { doTest(); }
|
||||
public void testConditionalInBinaryExpression() { doTest(); }
|
||||
public void testArrayInitializer() { doTest(); }
|
||||
|
||||
@Override
|
||||
protected String getIntentionName() {
|
||||
|
||||
Reference in New Issue
Block a user