From 3bb1d1c10f3dc6327bde3f9c8cebf488fb46fc04 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Thu, 20 Oct 2016 16:05:55 +0200 Subject: [PATCH] IG: try to make inspection non-quadratic --- ...aUnfriendlyMethodOverloadInspectionBase.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java index 3a717ada5d10..cc5a6dbe7c6e 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/naming/LambdaUnfriendlyMethodOverloadInspectionBase.java @@ -15,6 +15,7 @@ */ 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; @@ -52,9 +53,14 @@ public class LambdaUnfriendlyMethodOverloadInspectionBase extends BaseInspection private static class LambdaUnfriendlyMethodOverloadVisitor extends BaseInspectionVisitor { + private static final Key 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) { @@ -77,6 +83,7 @@ public class LambdaUnfriendlyMethodOverloadInspectionBase extends BaseInspection 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; @@ -95,10 +102,16 @@ public class LambdaUnfriendlyMethodOverloadInspectionBase extends BaseInspection } 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) { -- 2.32.0