protected method calling other overload is not redundant

This commit is contained in:
Alexey Kudravtsev
2016-05-17 14:20:36 +03:00
parent 1f4722de45
commit 34a7dafc46
2 changed files with 21 additions and 6 deletions
@@ -112,10 +112,9 @@ public class RedundantMethodOverrideInspection extends BaseInspection {
return; // method overridden and made final - not redundant
}
final PsiCodeBlock superBody = superMethod.getBody();
if (!EquivalenceChecker.codeBlocksAreEquivalent(body, superBody) && !isSuperCallWithSameArguments(body, method, superMethod)) {
return;
if (EquivalenceChecker.codeBlocksAreEquivalent(body, superBody) || isSuperCallWithSameArguments(body, method, superMethod)) {
registerMethodError(method);
}
registerMethodError(method);
}
private static boolean isSuperCallWithSameArguments(PsiCodeBlock body, PsiMethod method, PsiMethod superMethod) {
@@ -146,15 +145,16 @@ public class RedundantMethodOverrideInspection extends BaseInspection {
if (!(expression instanceof PsiMethodCallExpression)) {
return false;
}
final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression;
if (!MethodCallUtils.isSuperMethodCall(methodCallExpression, method)) return false;
if (superMethod.hasModifierProperty(PsiModifier.PROTECTED)) {
final PsiJavaFile superFile = (PsiJavaFile)superMethod.getContainingFile();
final PsiJavaFile file = (PsiJavaFile)method.getContainingFile();
// implementing a protected method in another package makes it available to that package.
return superFile.getPackageName().equals(file.getPackageName());
if (!superFile.getPackageName().equals(file.getPackageName())) return false;
}
final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)expression;
if (!MethodCallUtils.isSuperMethodCall(methodCallExpression, method)) return false;
return areSameArguments(methodCallExpression, method);
}
@@ -76,4 +76,19 @@ class MyList extends ArrayList {
protected void removeRange(int fromIndex, int toIndex) {
super.removeRange(fromIndex, toIndex);
}
}
////////////////
class Sup {
void overload1(int i) {}
void overload1(int i, boolean b) {}
protected void foox() {
overload1(0);
}
}
class Sub extends Sup {
@Override
protected void foox() { // not redundant
overload1(0, true);
}
}