FunExprOccurrence: fall-back to global members instead of giving up if chain breaks

Reduces number of full PSI queries from 3660 to 3143 in performance test
This commit is contained in:
Tagir Valeev
2019-03-14 14:26:30 +07:00
parent ba3791e5de
commit 9ea477649c

View File

@@ -105,15 +105,16 @@ public class FunExprOccurrence {
Set<PsiClass> qualifiers = null;
for (int i = 0; i < referenceContext.size(); i++) {
ReferenceChainLink link = referenceContext.get(i);
List<? extends PsiMember> candidates = i == 0 ? link.getGlobalMembers(placeFile, samClasses.get(0).getProject())
: link.getSymbolMembers(qualifiers);
if (candidates == null) return true;
List<? extends PsiMember> candidates = qualifiers == null ? link.getGlobalMembers(placeFile, samClasses.get(0).getProject())
: link.getSymbolMembers(qualifiers);
if (candidates == null) {
continue;
}
if (i == referenceContext.size() - 1) {
return ContainerUtil.exists(candidates, m -> isCompatible(link, m, samClasses));
}
qualifiers = ApproximateResolver.getDefiniteSymbolTypes(candidates, qualifiers != null ? qualifiers : Collections.emptySet());
if (qualifiers == null) return true;
}
return true;