From 19407dd636cc94119002e5e5b4ed2e2ae1fbf1c5 Mon Sep 17 00:00:00 2001 From: "Anna.Kozlova" Date: Thu, 30 Mar 2017 17:19:29 +0200 Subject: [PATCH] overriding methods: skip functional expression search for non-abstract methods when some overriders are present (IDEA-169435) --- .../codeInsight/daemon/impl/MarkerType.java | 24 ++++++++++--------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java index 580244b0b882..7da422c36c5a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/MarkerType.java @@ -237,7 +237,7 @@ public class MarkerType { PsiMethod[] overridings = processor.toArray(PsiMethod.EMPTY_ARRAY); if (overridings.length == 0) { final PsiClass aClass = method.getContainingClass(); - if (aClass != null && FunctionalExpressionSearch.search(aClass).findFirst() != null) { + if (aClass != null && isAbstract && FunctionalExpressionSearch.search(aClass).findFirst() != null) { return "Has functional implementations"; } return null; @@ -462,17 +462,19 @@ public class MarkerType { return super.process(psiMethod); } }); - PsiClass psiClass = ReadAction.compute(myMethod::getContainingClass); - FunctionalExpressionSearch.search(psiClass).forEach(new CommonProcessors.CollectProcessor() { - @Override - public boolean process(final PsiFunctionalExpression expr) { - if (!updateComponent(expr, myRenderer.getComparator())) { - indicator.cancel(); + if (myMethod.hasModifierProperty(PsiModifier.ABSTRACT)) { + PsiClass psiClass = ReadAction.compute(myMethod::getContainingClass); + FunctionalExpressionSearch.search(psiClass).forEach(new CommonProcessors.CollectProcessor() { + @Override + public boolean process(final PsiFunctionalExpression expr) { + if (!updateComponent(expr, myRenderer.getComparator())) { + indicator.cancel(); + } + indicator.checkCanceled(); + return super.process(expr); } - indicator.checkCanceled(); - return super.process(expr); - } - }); + }); + } } } }