Java: only highlight different parameter name when overloaded method has less parameters (IDEA-325428)

for "Parameter name differs from parameter in overridden or overloaded method" inspection

GitOrigin-RevId: 2d4bb4d4136119c51320de0338c464aff768972d
This commit is contained in:
Bas Leijdekkers
2023-08-01 11:58:17 +00:00
committed by intellij-monorepo-bot
parent cdb4d0e7ae
commit bd4417426a
2 changed files with 24 additions and 4 deletions
@@ -96,6 +96,7 @@ public class ParameterNameDiffersFromOverriddenParameterInspection extends BaseI
}
final PsiReferenceExpression methodExpression = expression.getMethodExpression();
final boolean constructorCall = JavaPsiConstructorUtil.isConstructorCall(expression);
final boolean superCall = PsiUtil.isJavaToken(methodExpression.getReferenceNameElement(), JavaTokenType.SUPER_KEYWORD);
final PsiMethod method = PsiTreeUtil.getParentOfType(expression, PsiMethod.class, true);
if (method == null || !constructorCall && !method.getName().equals(methodExpression.getReferenceName())) {
return;
@@ -104,6 +105,10 @@ public class ParameterNameDiffersFromOverriddenParameterInspection extends BaseI
if (targetMethod == null) {
return;
}
final PsiParameterList parameterList = targetMethod.getParameterList();
if (!superCall && parameterList.getParametersCount() <= method.getParameterList().getParametersCount()) {
return;
}
final PsiClass containingClass = targetMethod.getContainingClass();
final PsiClass aClass = method.getContainingClass();
if (containingClass == null || aClass == null || containingClass != aClass && !aClass.isInheritor(containingClass, true)) {
@@ -112,7 +117,7 @@ public class ParameterNameDiffersFromOverriddenParameterInspection extends BaseI
if (m_ignoreOverridesOfLibraryMethods && targetMethod instanceof PsiCompiledElement) {
return;
}
final PsiParameter[] parameters = targetMethod.getParameterList().getParameters();
final PsiParameter[] parameters = parameterList.getParameters();
final PsiExpression[] arguments = argumentList.getExpressions();
for (int i = 0, length = Math.min(arguments.length, parameters.length); i < length; i++) {
final PsiExpression argument = PsiUtil.skipParenthesizedExprDown(arguments[i]);
@@ -135,9 +140,7 @@ public class ParameterNameDiffersFromOverriddenParameterInspection extends BaseI
continue;
}
int type = constructorCall
? PsiUtil.isJavaToken(methodExpression.getReferenceNameElement(), JavaTokenType.SUPER_KEYWORD)
? SUPER_CONSTRUCTOR
: OVERLOADED_CONSTRUCTOR
? superCall ? SUPER_CONSTRUCTOR : OVERLOADED_CONSTRUCTOR
: OVERLOADED_METHOD;
registerVariableError(targetParameter, parameterName, type);
}
@@ -95,6 +95,10 @@ class H extends G {
super(street.toString(), number);
}
H(String <warning descr="Parameter name 'title' is different from parameter 'name' in the super constructor">title</warning>, int age, int number) {
super(title, age);
}
private void configureMethod(final Iterable<Class<? extends String>> registeredAnnotations, final Integer method) {
for (final Class<? extends String> registeredAnnotation : registeredAnnotations) {
configureMethod(registeredAnnotation, method);
@@ -115,4 +119,17 @@ class J { // unrelated to I
public <T> T getBean(Class<T> requiredType) {
return null;
}
}
class Test {
static int method(int a, int b) {
return a + b;
}
static int method(int a, int b, int c) {
return method (a, method(b, c));
}
static int method(int a, int b, int c, int d) {
return method(a, method(b, c, d));
}
}