mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IG: fix "Unnecessary explicit numeric cast" polyadic expression problem (IDEA-172759)
This commit is contained in:
+21
-5
@@ -83,7 +83,7 @@ public class UnnecessaryExplicitNumericCastInspection extends BaseInspection {
|
||||
@Override
|
||||
protected void doFix(Project project, ProblemDescriptor descriptor) {
|
||||
final PsiElement element = descriptor.getPsiElement();
|
||||
final PsiElement parent = element.getParent();
|
||||
PsiElement parent = element.getParent();
|
||||
if (!(parent instanceof PsiTypeCastExpression)) {
|
||||
return;
|
||||
}
|
||||
@@ -91,12 +91,17 @@ public class UnnecessaryExplicitNumericCastInspection extends BaseInspection {
|
||||
if (isPrimitiveNumericCastNecessary(typeCastExpression)) {
|
||||
return;
|
||||
}
|
||||
PsiElement grandParent = parent.getParent();
|
||||
while (grandParent instanceof PsiParenthesizedExpression) {
|
||||
parent = grandParent;
|
||||
grandParent = parent.getParent();
|
||||
}
|
||||
final PsiExpression operand = typeCastExpression.getOperand();
|
||||
if (operand == null) {
|
||||
typeCastExpression.delete();
|
||||
parent.delete();
|
||||
}
|
||||
else {
|
||||
typeCastExpression.replace(operand);
|
||||
parent.replace(operand);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -163,9 +168,20 @@ public class UnnecessaryExplicitNumericCastInspection extends BaseInspection {
|
||||
}
|
||||
if (PsiType.LONG.equals(castType) || PsiType.FLOAT.equals(castType) || PsiType.DOUBLE.equals(castType)) {
|
||||
final PsiExpression[] operands = polyadicExpression.getOperands();
|
||||
for (PsiExpression operand1 : operands) {
|
||||
int expressionIndex = -1;
|
||||
for (int i = 0; i < operands.length; i++) {
|
||||
if (expressionIndex == 0 && i > 1) {
|
||||
return true;
|
||||
}
|
||||
final PsiExpression operand1 = operands[i];
|
||||
if (PsiTreeUtil.isAncestor(operand1, expression, false)) {
|
||||
continue;
|
||||
if (i > 0) {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
expressionIndex = i;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
final PsiType type = operand1.getType();
|
||||
if (castType.equals(type)) {
|
||||
|
||||
+8
@@ -101,4 +101,12 @@ class S {
|
||||
return (T) (Object) 0;
|
||||
}
|
||||
|
||||
void polyadic() {
|
||||
int a=1;
|
||||
int b=2;
|
||||
System.out.println(((double) a) / b / 10.0);
|
||||
double c = 3.5;
|
||||
System.out.println((<warning descr="'a' unnecessarily cast to 'double'">double</warning>)a / c / 10.0);
|
||||
System.out.println(19/ (double)a / c / 10.0);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user