mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
(no message)
This commit is contained in:
@@ -1,18 +1,19 @@
|
||||
package com.siyeh.ig.confusing;
|
||||
|
||||
import com.intellij.codeInspection.InspectionManager;
|
||||
import com.intellij.codeInspection.ProblemDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
import com.siyeh.ig.BaseInspection;
|
||||
import com.siyeh.ig.BaseInspectionVisitor;
|
||||
import com.siyeh.ig.GroupNames;
|
||||
import com.siyeh.ig.StatementInspection;
|
||||
import com.siyeh.ig.*;
|
||||
import com.siyeh.ig.psiutils.BoolUtils;
|
||||
import com.siyeh.ig.ui.SingleCheckboxOptionsPanel;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
public class NegatedIfElseInspection extends StatementInspection {
|
||||
public boolean m_ignoreNegatedNullComparison = true;
|
||||
private final NegatedIfElseFix fix = new NegatedIfElseFix();
|
||||
|
||||
public String getDisplayName() {
|
||||
return "If statement with negated condition";
|
||||
@@ -35,6 +36,29 @@ public class NegatedIfElseInspection extends StatementInspection {
|
||||
this, "m_ignoreNegatedNullComparison");
|
||||
}
|
||||
|
||||
protected InspectionGadgetsFix buildFix(PsiElement location){
|
||||
return fix;
|
||||
}
|
||||
|
||||
private static class NegatedIfElseFix extends InspectionGadgetsFix{
|
||||
|
||||
|
||||
public String getName(){
|
||||
return "Invert If Condition";
|
||||
}
|
||||
|
||||
public void applyFix(Project project,
|
||||
ProblemDescriptor problemDescriptor){
|
||||
final PsiElement ifToken = problemDescriptor.getPsiElement();
|
||||
final PsiIfStatement ifStatement = (PsiIfStatement) ifToken.getParent();
|
||||
final PsiStatement elseBranch = ifStatement.getElseBranch();
|
||||
final PsiStatement thenBranch = ifStatement.getThenBranch();
|
||||
final PsiExpression condition = ifStatement.getCondition();
|
||||
final String negatedCondition = BoolUtils.getNegatedExpressionText(condition);
|
||||
final String newStatement = "if("+ negatedCondition + ')' +elseBranch.getText() + " else " + thenBranch.getText();
|
||||
replaceStatement(project, ifStatement, newStatement);
|
||||
}
|
||||
}
|
||||
private class NegatedIfElseVisitor extends BaseInspectionVisitor {
|
||||
private NegatedIfElseVisitor(BaseInspection inspection, InspectionManager inspectionManager, boolean isOnTheFly) {
|
||||
super(inspection, inspectionManager, isOnTheFly);
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
package com.siyeh.ig.psiutils;
|
||||
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.psi.PsiJavaToken;
|
||||
import com.intellij.psi.PsiPrefixExpression;
|
||||
import com.intellij.psi.*;
|
||||
|
||||
public class BoolUtils {
|
||||
private BoolUtils() {
|
||||
@@ -24,15 +21,22 @@ public class BoolUtils {
|
||||
final PsiExpression operand = prefixExp.getOperand();
|
||||
return ParenthesesUtils.stripParentheses(operand);
|
||||
}
|
||||
|
||||
public static String getNegatedExpressionText(PsiExpression condition) {
|
||||
if (isNegation(condition)) {
|
||||
final PsiExpression negatedCondition = getNegated(condition);
|
||||
return negatedCondition.getText();
|
||||
} else if (ParenthesesUtils.getPrecendence(condition) >
|
||||
ParenthesesUtils.PREFIX_PRECEDENCE) {
|
||||
public static String getNegatedExpressionText(PsiExpression condition){
|
||||
if(BoolUtils.isNegation(condition)){
|
||||
final PsiExpression negated = getNegated(condition);
|
||||
return negated.getText();
|
||||
} else if(ComparisonUtils.isComparison(condition)){
|
||||
final PsiBinaryExpression binaryExpression = (PsiBinaryExpression) condition;
|
||||
final PsiJavaToken sign = binaryExpression.getOperationSign();
|
||||
final String operator = sign.getText();
|
||||
final String negatedComparison = ComparisonUtils.getNegatedComparison(operator);
|
||||
final PsiExpression lhs = binaryExpression.getLOperand();
|
||||
final PsiExpression rhs = binaryExpression.getROperand();
|
||||
return lhs.getText() + negatedComparison + rhs.getText();
|
||||
} else if(ParenthesesUtils.getPrecendence(condition) >
|
||||
ParenthesesUtils.PREFIX_PRECEDENCE){
|
||||
return "!(" + condition.getText() + ')';
|
||||
} else {
|
||||
} else{
|
||||
return '!' + condition.getText();
|
||||
}
|
||||
|
||||
|
||||
@@ -3,6 +3,7 @@ package com.siyeh.ig.psiutils;
|
||||
import com.intellij.psi.JavaTokenType;
|
||||
import com.intellij.psi.PsiBinaryExpression;
|
||||
import com.intellij.psi.PsiJavaToken;
|
||||
import com.intellij.psi.PsiExpression;
|
||||
import com.intellij.psi.tree.IElementType;
|
||||
|
||||
import java.util.HashMap;
|
||||
@@ -14,7 +15,7 @@ public class ComparisonUtils {
|
||||
private ComparisonUtils() {
|
||||
super();
|
||||
}
|
||||
|
||||
private static final Map s_invertedComparisons = new HashMap(6);
|
||||
private static final Set s_comparisonStrings = new HashSet(6);
|
||||
private static final Map s_swappedComparisons = new HashMap(6);
|
||||
|
||||
@@ -33,8 +34,25 @@ public class ComparisonUtils {
|
||||
s_swappedComparisons.put(">=", "<=");
|
||||
s_swappedComparisons.put("<=", ">=");
|
||||
|
||||
s_invertedComparisons.put("==", "!=");
|
||||
s_invertedComparisons.put("!=", "==");
|
||||
s_invertedComparisons.put(">", "<=");
|
||||
s_invertedComparisons.put("<", ">=");
|
||||
s_invertedComparisons.put(">=", "<");
|
||||
s_invertedComparisons.put("<=", ">");
|
||||
|
||||
}
|
||||
|
||||
public static boolean isComparison(PsiExpression exp){
|
||||
if(!(exp instanceof PsiBinaryExpression)){
|
||||
return false;
|
||||
}
|
||||
final PsiBinaryExpression binaryExpression = (PsiBinaryExpression) exp;
|
||||
final PsiJavaToken sign = binaryExpression.getOperationSign();
|
||||
final String operation = sign.getText();
|
||||
return s_comparisonStrings.contains(operation);
|
||||
}
|
||||
|
||||
public static boolean isComparison(String str) {
|
||||
return s_comparisonStrings.contains(str);
|
||||
}
|
||||
@@ -52,4 +70,8 @@ public class ComparisonUtils {
|
||||
return tokenType.equals(JavaTokenType.EQEQ) || tokenType.equals(JavaTokenType.NE);
|
||||
}
|
||||
|
||||
public static String getNegatedComparison(String str){
|
||||
return (String) s_invertedComparisons.get(str);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user