mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
invert if: check precedence and keep parenthesis accordingly (IDEA-175062)
replace duplicated negation utility
This commit is contained in:
+4
-2
@@ -16,7 +16,6 @@
|
||||
package com.intellij.codeInsight.intention.impl;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightBundle;
|
||||
import com.intellij.codeInsight.CodeInsightServicesUtil;
|
||||
import com.intellij.codeInsight.intention.PsiElementBaseIntentionAction;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
@@ -29,6 +28,7 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.util.ArrayUtilRt;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.siyeh.ig.psiutils.BoolUtils;
|
||||
import com.siyeh.ig.psiutils.CommentTracker;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -93,7 +93,9 @@ public class InvertIfConditionAction extends PsiElementBaseIntentionAction {
|
||||
|
||||
ifStatement = setupBranches(ifStatement, controlFlow);
|
||||
if (condition != null) {
|
||||
Objects.requireNonNull(ifStatement.getCondition()).replace(CodeInsightServicesUtil.invertCondition(condition));
|
||||
PsiExpression negatedExpression =
|
||||
JavaPsiFacade.getElementFactory(project).createExpressionFromText(BoolUtils.getNegatedExpressionText(condition), condition);
|
||||
Objects.requireNonNull(ifStatement.getCondition()).replace(negatedExpression);
|
||||
}
|
||||
|
||||
formatIf(ifStatement);
|
||||
|
||||
+3
-2
@@ -1,7 +1,6 @@
|
||||
// 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.intellij.codeInsight.template.postfix.util;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightServicesUtil;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateExpressionSelector;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplateExpressionSelectorBase;
|
||||
import com.intellij.codeInsight.template.postfix.templates.PostfixTemplatePsiInfo;
|
||||
@@ -18,6 +17,7 @@ import com.intellij.psi.util.PsiUtil;
|
||||
import com.intellij.refactoring.introduceVariable.IntroduceVariableBase;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import com.siyeh.ig.psiutils.BoolUtils;
|
||||
import org.jetbrains.annotations.Contract;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -128,7 +128,8 @@ public abstract class JavaPostfixTemplatesUtils {
|
||||
@Override
|
||||
public PsiExpression getNegatedExpression(@NotNull PsiElement element) {
|
||||
assert element instanceof PsiExpression;
|
||||
return CodeInsightServicesUtil.invertCondition((PsiExpression)element);
|
||||
String negatedExpressionText = BoolUtils.getNegatedExpressionText((PsiExpression)element);
|
||||
return JavaPsiFacade.getElementFactory(element.getProject()).createExpressionFromText(negatedExpressionText, element);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
+7
-3
@@ -15,7 +15,6 @@
|
||||
*/
|
||||
package com.intellij.refactoring.invertBoolean;
|
||||
|
||||
import com.intellij.codeInsight.CodeInsightServicesUtil;
|
||||
import com.intellij.codeInsight.daemon.impl.RecursiveCallLineMarkerProvider;
|
||||
import com.intellij.ide.util.SuperMethodWarningUtil;
|
||||
import com.intellij.lang.java.JavaLanguage;
|
||||
@@ -33,6 +32,7 @@ import com.intellij.usageView.UsageInfo;
|
||||
import com.intellij.util.Query;
|
||||
import com.intellij.util.containers.HashSet;
|
||||
import com.intellij.util.containers.MultiMap;
|
||||
import com.siyeh.ig.psiutils.BoolUtils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collection;
|
||||
@@ -172,11 +172,15 @@ public class JavaInvertBooleanDelegate extends InvertBooleanDelegate {
|
||||
if (expression instanceof PsiMethodReferenceExpression) {
|
||||
final PsiExpression callExpression = LambdaRefactoringUtil.convertToMethodCallInLambdaBody((PsiMethodReferenceExpression)expression);
|
||||
if (callExpression instanceof PsiCallExpression) {
|
||||
callExpression.replace(CodeInsightServicesUtil.invertCondition(callExpression));
|
||||
PsiExpression negatedExpression = JavaPsiFacade.getElementFactory(callExpression.getProject())
|
||||
.createExpressionFromText(BoolUtils.getNegatedExpressionText(callExpression), callExpression);
|
||||
callExpression.replace(negatedExpression);
|
||||
}
|
||||
}
|
||||
else if (!(expression.getParent() instanceof PsiExpressionStatement)) {
|
||||
expression.replace(CodeInsightServicesUtil.invertCondition((PsiExpression)expression));
|
||||
PsiExpression negatedExpression = JavaPsiFacade.getElementFactory(expression.getProject())
|
||||
.createExpressionFromText(BoolUtils.getNegatedExpressionText((PsiExpression)expression), expression);
|
||||
expression.replace(negatedExpression);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// "Invert 'if' condition" "true"
|
||||
class A {
|
||||
|
||||
void method(Object x) {
|
||||
if (x instanceof String) {
|
||||
System.out.println(((String) x).toUpperCase());
|
||||
}
|
||||
else {
|
||||
System.out.println(x.toString());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
// "Invert 'if' condition" "true"
|
||||
class A {
|
||||
|
||||
void method(Object x) {
|
||||
if (!<caret>(x instanceof String)) {
|
||||
System.out.println(x.toString());
|
||||
} else {
|
||||
System.out.println(((String) x).toUpperCase());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -11,7 +11,7 @@ public class IfStatementWithIdenticalBranches {
|
||||
|
||||
int work() {
|
||||
final int y = getX();
|
||||
if (!true) {
|
||||
if (false) {
|
||||
System.out.println(y);
|
||||
}
|
||||
return y;
|
||||
|
||||
@@ -11,7 +11,7 @@ public class IfStatementWithIdenticalBranches {
|
||||
|
||||
int work() {
|
||||
int x = getX();
|
||||
if (!true) {
|
||||
if (false) {
|
||||
return x;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -21,8 +21,12 @@ import com.intellij.psi.tree.IElementType;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
|
||||
/**
|
||||
* @author ven
|
||||
* Consider using instead
|
||||
* {@link com.siyeh.ig.psiutils.BoolUtils#getNegatedExpressionText(com.intellij.psi.PsiExpression)}
|
||||
*
|
||||
* to be deleted in 2018.2
|
||||
*/
|
||||
@Deprecated
|
||||
public class CodeInsightServicesUtil {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.CodeInsightServicesUtil");
|
||||
|
||||
|
||||
+10
-1
@@ -80,7 +80,10 @@ public class BoolUtils {
|
||||
}
|
||||
if (expression instanceof PsiParenthesizedExpression) {
|
||||
final PsiParenthesizedExpression parenthesizedExpression = (PsiParenthesizedExpression)expression;
|
||||
return '(' + getNegatedExpressionText(parenthesizedExpression.getExpression(), tracker) + ')';
|
||||
PsiExpression operand = parenthesizedExpression.getExpression();
|
||||
if (operand != null) {
|
||||
return '(' + getNegatedExpressionText(operand, tracker) + ')';
|
||||
}
|
||||
}
|
||||
if (expression instanceof PsiConditionalExpression) {
|
||||
final PsiConditionalExpression conditionalExpression = (PsiConditionalExpression)expression;
|
||||
@@ -147,6 +150,12 @@ public class BoolUtils {
|
||||
return (newPrecedence > precedence) ? '(' + join + ')' : join;
|
||||
}
|
||||
}
|
||||
if (expression instanceof PsiLiteralExpression) {
|
||||
Object value = ((PsiLiteralExpression)expression).getValue();
|
||||
if (value instanceof Boolean) {
|
||||
return String.valueOf(!((Boolean)value));
|
||||
}
|
||||
}
|
||||
return '!' + ParenthesesUtils.getText(tracker.markUnchanged(expression), ParenthesesUtils.PREFIX_PRECEDENCE);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user