Collection<PsiElement> (@NotNull PsiReference reference) { PsiElement refElement = reference.getElement(); TargetElementEvaluatorEx2 evaluator = TargetElementUtilBase.getElementEvaluatorsEx2(refElement.getLanguage()); if (evaluator != null) { Collection<PsiElement> candidates = evaluator.getTargetCandidates(reference); if (candidates != null) return candidates; } if (reference instanceof PsiPolyVariantReference) { final ResolveResult[] results = ((PsiPolyVariantReference)reference).multiResolve(false); List<PsiElement> navigatableResults = new ArrayList<>(results.length); for (ResolveResult r : results) { PsiElement element = r.getElement(); if (isNavigatableSource(element)) { navigatableResults.add(element); } } return navigatableResults; } PsiElement resolved = reference.resolve(); if (resolved instanceof NavigationItem) { return Collections.singleton(resolved); } return Collections.emptyList(); }