mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
JavaTargetElementEvaluator#findOverridingMethod: run DFA only if method class has subclasses
This commit is contained in:
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user