From 3fdbcdd753bd52a26e9891c10684dc42a97c7658 Mon Sep 17 00:00:00 2001 From: Tagir Valeev Date: Mon, 18 Dec 2017 12:09:08 +0700 Subject: [PATCH] JavaTargetElementEvaluator#findOverridingMethod: run DFA only if method class has subclasses --- .../com/intellij/codeInsight/JavaTargetElementEvaluator.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java b/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java index 96ef43fbd685..ab11f1f74398 100644 --- a/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java +++ b/java/java-impl/src/com/intellij/codeInsight/JavaTargetElementEvaluator.java @@ -15,6 +15,7 @@ import com.intellij.psi.javadoc.PsiDocToken; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.searches.ClassInheritorsSearch; +import com.intellij.psi.search.searches.DirectClassInheritorsSearch; import com.intellij.psi.search.searches.FunctionalExpressionSearch; import com.intellij.psi.util.*; import com.intellij.util.BitUtil; @@ -87,6 +88,9 @@ public class JavaTargetElementEvaluator extends TargetElementEvaluatorEx2 implem if (!(reference instanceof PsiReferenceExpression) || !reference.isReferenceTo(method)) return null; PsiExpression qualifier = ((PsiReferenceExpression)reference).getQualifierExpression(); if (qualifier == null) return null; + if (DirectClassInheritorsSearch.search(qualifierClass, qualifier.getResolveScope(), false).findFirst() == null) { + return null; + } TypeConstraint constraint = CommonDataflow.getExpressionFact(qualifier, DfaFactType.TYPE_CONSTRAINT); if (constraint == null) return null; return MethodUtils.findSpecificMethod(method, constraint.getPsiType());