diff options
author | Tor Norbye <tnorbye@google.com> | 2014-09-04 20:44:00 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2014-09-04 20:44:01 +0000 |
commit | fb5a02906f644d044eb0286bf27d413ba0e05216 (patch) | |
tree | bca7d49005d81d10c70bc3f547df041c636b4300 /platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java | |
parent | 9cde0e3c015174898df8b8f3672185941fad4786 (diff) | |
parent | d245f58efbfc26b13b9b9d5e52e6a83a0d76216c (diff) | |
download | idea-fb5a02906f644d044eb0286bf27d413ba0e05216.tar.gz |
Merge "Merge remote-tracking branch 'aosp/upstream-master' into merge"
Diffstat (limited to 'platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java')
-rw-r--r-- | platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java index 2c44451ef260..72b0a4471e9c 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java @@ -34,6 +34,7 @@ import com.intellij.openapi.editor.markup.MarkupModel; import com.intellij.openapi.editor.markup.RangeHighlighter; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Couple; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.psi.*; @@ -115,33 +116,50 @@ public class IdentifierHighlighterPass extends TextEditorHighlightingPass { } } - private void highlightTargetUsages(@NotNull PsiElement target) { + /** + * Returns read and write usages of psi element inside single file + * + * @param target target psi element + * @param psiFile psi file for element + * @return a pair where first element is read usages and second is write usages + */ + public static Couple<Collection<TextRange>> getHighlightUsages(@NotNull PsiElement target, PsiFile psiFile) { + Collection<TextRange> readRanges = new ArrayList<TextRange>(); + Collection<TextRange> writeRanges = new ArrayList<TextRange>(); final ReadWriteAccessDetector detector = ReadWriteAccessDetector.findDetector(target); final FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(target.getProject())).getFindUsagesManager(); final FindUsagesHandler findUsagesHandler = findUsagesManager.getFindUsagesHandler(target, true); - final LocalSearchScope scope = new LocalSearchScope(myFile); + final LocalSearchScope scope = new LocalSearchScope(psiFile); Collection<PsiReference> refs = findUsagesHandler != null ? findUsagesHandler.findReferencesToHighlight(target, scope) : ReferencesSearch.search(target, scope).findAll(); for (PsiReference psiReference : refs) { final List<TextRange> textRanges = HighlightUsagesHandler.getRangesToHighlight(psiReference); if (detector == null || detector.getReferenceAccess(target, psiReference) == ReadWriteAccessDetector.Access.Read) { - myReadAccessRanges.addAll(textRanges); + readRanges.addAll(textRanges); } else { - myWriteAccessRanges.addAll(textRanges); + writeRanges.addAll(textRanges); } } - final TextRange declRange = HighlightUsagesHandler.getNameIdentifierRange(myFile, target); + final TextRange declRange = HighlightUsagesHandler.getNameIdentifierRange(psiFile, target); if (declRange != null) { if (detector != null && detector.isDeclarationWriteAccess(target)) { - myWriteAccessRanges.add(declRange); + writeRanges.add(declRange); } else { - myReadAccessRanges.add(declRange); + readRanges.add(declRange); } } + + return Couple.of(readRanges, writeRanges); + } + + private void highlightTargetUsages(@NotNull PsiElement target) { + final Couple<Collection<TextRange>> usages = getHighlightUsages(target, myFile); + myReadAccessRanges.addAll(usages.first); + myWriteAccessRanges.addAll(usages.second); } @Override |