mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-92306 (Wrong fix for "Double negation" warning)
This commit is contained in:
+36
-22
@@ -66,15 +66,32 @@ public class DoubleNegationInspection extends BaseInspection {
|
||||
} else if (expression instanceof PsiPolyadicExpression) {
|
||||
final PsiPolyadicExpression polyadicExpression = (PsiPolyadicExpression)expression;
|
||||
final PsiExpression[] operands = polyadicExpression.getOperands();
|
||||
final StringBuilder newExpressionText = new StringBuilder();
|
||||
for (int i = 0, length = operands.length; i < length; i++) {
|
||||
final PsiExpression operand = operands[i];
|
||||
if (i > 0) {
|
||||
newExpressionText.append("==");
|
||||
final int length = operands.length;
|
||||
if (length == 2) {
|
||||
final PsiExpression firstOperand = operands[0];
|
||||
final PsiExpression secondOperand = operands[1];
|
||||
if (isNegation(firstOperand)) {
|
||||
replaceExpression(polyadicExpression, BoolUtils.getNegatedExpressionText(firstOperand) + "==" + secondOperand.getText());
|
||||
}
|
||||
else {
|
||||
replaceExpression(polyadicExpression, firstOperand.getText() + "==" + BoolUtils.getNegatedExpressionText(secondOperand));
|
||||
}
|
||||
newExpressionText.append(BoolUtils.getNegatedExpressionText(operand));
|
||||
}
|
||||
replaceExpression(polyadicExpression, newExpressionText.toString());
|
||||
else {
|
||||
final StringBuilder newExpressionText = new StringBuilder();
|
||||
for (int i = 0; i < length; i++) {
|
||||
if (i > 0) {
|
||||
if (length % 2 != 1 && i == length - 1) {
|
||||
newExpressionText.append("!=");
|
||||
}
|
||||
else {
|
||||
newExpressionText.append("==");
|
||||
}
|
||||
}
|
||||
newExpressionText.append(operands[i].getText());
|
||||
}
|
||||
replaceExpression(polyadicExpression, newExpressionText.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -116,25 +133,22 @@ public class DoubleNegationInspection extends BaseInspection {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (operands.length > 3) {
|
||||
return;
|
||||
}
|
||||
registerError(expression);
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean isNegation(@Nullable PsiExpression expression) {
|
||||
expression = ParenthesesUtils.stripParentheses(expression);
|
||||
if (expression instanceof PsiPrefixExpression) return isNegation((PsiPrefixExpression)expression);
|
||||
if (expression instanceof PsiPolyadicExpression) return isNegation((PsiPolyadicExpression)expression);
|
||||
return false;
|
||||
}
|
||||
static boolean isNegation(@Nullable PsiExpression expression) {
|
||||
expression = ParenthesesUtils.stripParentheses(expression);
|
||||
if (expression instanceof PsiPrefixExpression) return isNegation((PsiPrefixExpression)expression);
|
||||
if (expression instanceof PsiPolyadicExpression) return isNegation((PsiPolyadicExpression)expression);
|
||||
return false;
|
||||
}
|
||||
|
||||
private static boolean isNegation(PsiPolyadicExpression expression) {
|
||||
return JavaTokenType.NE.equals(expression.getOperationTokenType());
|
||||
}
|
||||
static boolean isNegation(PsiPrefixExpression expression) {
|
||||
return JavaTokenType.EXCL.equals(expression.getOperationTokenType());
|
||||
}
|
||||
|
||||
private static boolean isNegation(PsiPrefixExpression expression) {
|
||||
return JavaTokenType.EXCL.equals(expression.getOperationTokenType());
|
||||
}
|
||||
static boolean isNegation(PsiPolyadicExpression expression) {
|
||||
return JavaTokenType.NE.equals(expression.getOperationTokenType());
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user