*/
package com.siyeh.ig.naming;
+import com.intellij.openapi.util.Key;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiSuperMethodUtil;
import com.siyeh.InspectionGadgetsBundle;
private static class LambdaUnfriendlyMethodOverloadVisitor extends BaseInspectionVisitor {
+ private static final Key<Boolean> SKIP_MARKER = new Key<>("skip marker for lambda unfriendly method overload inspection");
+
@Override
public void visitMethod(PsiMethod method) {
super.visitMethod(method);
+ if (method.getUserData(SKIP_MARKER) == Boolean.TRUE) {
+ return;
+ }
final PsiParameterList parameterList = method.getParameterList();
final int parametersCount = parameterList.getParametersCount();
if (parametersCount == 0) {
return;
}
final String name = method.getName();
+ boolean problemFound = false;
for (PsiMethod sameNameMethod : containingClass.findMethodsByName(name, true)) {
if (method.equals(sameNameMethod) || PsiSuperMethodUtil.isSuperMethod(method, sameNameMethod)) {
continue;
}
if (areSameShapeFunctionalTypes(functionalType, otherFunctionalType)) {
- registerMethodError(method, method);
- return;
+ problemFound = true;
+ if (containingClass.equals(sameNameMethod.getContainingClass())) {
+ registerMethodError(sameNameMethod, sameNameMethod);
+ sameNameMethod.putUserData(SKIP_MARKER, Boolean.TRUE);
+ }
}
}
+ if (problemFound) {
+ registerMethodError(method, method);
+ }
}
private static boolean areSameShapeFunctionalTypes(PsiType one, PsiType two) {