(no message)

This commit is contained in:
Dave Griffith
2005-01-28 17:43:44 +03:00
parent 211eec05b1
commit 90dbeb0795
3 changed files with 67 additions and 17 deletions
@@ -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);
}
}