From cf77e8a06f8ddf2482efb1a85c61564244e16273 Mon Sep 17 00:00:00 2001 From: Piotr Tomiak Date: Mon, 20 May 2019 10:04:03 +0200 Subject: [PATCH] WEB-36042 Angular: process only equivalent references for directive selectors usage. GitOrigin-RevId: 05e21560a331a6da48b2a68f30cf99b595381be0 --- .../find/findUsages/JavaFindUsagesHelper.java | 2 +- .../find/findUsages/FindUsagesHelper.java | 26 +++++++++++++++---- .../find/findUsages/FindUsagesHandler.java | 2 +- 3 files changed, 23 insertions(+), 7 deletions(-) diff --git a/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java b/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java index 347e04e06fa4..717d6587956f 100644 --- a/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java +++ b/java/java-analysis-impl/src/com/intellij/find/findUsages/JavaFindUsagesHelper.java @@ -193,7 +193,7 @@ public class JavaFindUsagesHelper { if (!isSearchable && options.isSearchForTextOccurrences && options.searchScope instanceof GlobalSearchScope) { Collection stringsToSearch = ReadAction.compute(() -> getElementNames(element)); // todo add to fastTrack - if (!FindUsagesHelper.processUsagesInText(element, stringsToSearch, (GlobalSearchScope)options.searchScope, processor)) return false; + if (!FindUsagesHelper.processUsagesInText(element, stringsToSearch, false, (GlobalSearchScope)options.searchScope, processor)) return false; } return true; } diff --git a/platform/indexing-impl/src/com/intellij/find/findUsages/FindUsagesHelper.java b/platform/indexing-impl/src/com/intellij/find/findUsages/FindUsagesHelper.java index c53dfd32c311..8f9e27a1c0ee 100644 --- a/platform/indexing-impl/src/com/intellij/find/findUsages/FindUsagesHelper.java +++ b/platform/indexing-impl/src/com/intellij/find/findUsages/FindUsagesHelper.java @@ -31,13 +31,27 @@ import org.jetbrains.annotations.NotNull; import java.util.Collection; public class FindUsagesHelper { + /** + * @deprecated use {@code processUsagesInText(PsiElement, Collection, GlobalSearchScope, boolean, Processor} instead. + */ + @Deprecated public static boolean processUsagesInText(@NotNull final PsiElement element, @NotNull Collection stringToSearch, @NotNull GlobalSearchScope searchScope, @NotNull Processor processor) { - final TextRange elementTextRange = ReadAction.compute(() -> !element.isValid() || element instanceof PsiCompiledElement ? null : element.getTextRange()); + return processUsagesInText(element, stringToSearch, false, searchScope, processor); + } + + public static boolean processUsagesInText(@NotNull final PsiElement element, + @NotNull Collection stringToSearch, + boolean equivalentReferencesOnly, + @NotNull GlobalSearchScope searchScope, + @NotNull Processor processor) { + final TextRange elementTextRange = ReadAction.compute( + () -> !element.isValid() || element instanceof PsiCompiledElement ? null + : element.getTextRange()); UsageInfoFactory factory = (usage, startOffset, endOffset) -> { - if (!element.isValid()) return new UsageInfo(usage, startOffset, endOffset, true); + if (!element.isValid()) return equivalentReferencesOnly ? null : new UsageInfo(usage, startOffset, endOffset, true); if (elementTextRange != null && usage.getContainingFile() == element.getContainingFile() && elementTextRange.contains(startOffset) @@ -48,15 +62,17 @@ public class FindUsagesHelper { PsiReference someReference = usage.findReferenceAt(startOffset); if (someReference != null) { PsiElement refElement = someReference.getElement(); - for (PsiReference ref : PsiReferenceService.getService().getReferences(refElement, new PsiReferenceService.Hints(element, null))) { + for (PsiReference ref : PsiReferenceService.getService() + .getReferences(refElement, new PsiReferenceService.Hints(element, null))) { if (element.getManager().areElementsEquivalent(ref.resolve(), element)) { - TextRange range = ref.getRangeInElement().shiftRight(refElement.getTextRange().getStartOffset() - usage.getTextRange().getStartOffset()); + TextRange range = ref.getRangeInElement() + .shiftRight(refElement.getTextRange().getStartOffset() - usage.getTextRange().getStartOffset()); return new UsageInfo(usage, range.getStartOffset(), range.getEndOffset(), true); } } } - return new UsageInfo(usage, startOffset, endOffset, true); + return equivalentReferencesOnly ? null : new UsageInfo(usage, startOffset, endOffset, true); }; for (String s : stringToSearch) { if (!PsiSearchHelperImpl.processTextOccurrences(element, s, searchScope, processor, factory)) return false; diff --git a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesHandler.java b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesHandler.java index d4c378bf6ad8..dabf7c5a1b11 100644 --- a/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesHandler.java +++ b/platform/lang-impl/src/com/intellij/find/findUsages/FindUsagesHandler.java @@ -142,7 +142,7 @@ public abstract class FindUsagesHandler { @NotNull GlobalSearchScope searchScope) { Collection stringToSearch = ReadAction.compute(() -> getStringsToSearch(element)); if (stringToSearch == null) return true; - return FindUsagesHelper.processUsagesInText(element, stringToSearch, searchScope, processor); + return FindUsagesHelper.processUsagesInText(element, stringToSearch, false, searchScope, processor); } @Nullable