From be80e61677d38e35260ccaa98969fa10ab833d96 Mon Sep 17 00:00:00 2001 From: Maxim Shafirov Date: Wed, 19 May 2010 20:44:57 +0400 Subject: [PATCH] Highlight usages supports MultiRangeReference (as seen in objective-c message passing). --- .../impl/IdentifierHighlighterPass.java | 6 +++--- .../highlighting/HighlightUsagesHandler.java | 21 +++++++++++-------- 2 files changed, 15 insertions(+), 12 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 07e50a9763a4..d83f41429e3f 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 @@ -98,12 +98,12 @@ public class IdentifierHighlighterPass extends TextEditorHighlightingPass { final PsiElement finalMyTarget = myTarget; ReferencesSearch.search(myTarget, new LocalSearchScope(myFile)).forEach(new Processor() { public boolean process(final PsiReference psiReference) { - final TextRange textRange = HighlightUsagesHandler.getRangeToHighlight(psiReference); + final List textRanges = HighlightUsagesHandler.getRangesToHighlight(psiReference); if (detector == null || detector.getReferenceAccess(finalMyTarget, psiReference) == ReadWriteAccessDetector.Access.Read) { - myReadAccessRanges.add(textRange); + myReadAccessRanges.addAll(textRanges); } else { - myWriteAccessRanges.add(textRange); + myWriteAccessRanges.addAll(textRanges); } return true; } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightUsagesHandler.java b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightUsagesHandler.java index dc62c4c45461..077ae1c4a758 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightUsagesHandler.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/highlighting/HighlightUsagesHandler.java @@ -365,19 +365,22 @@ public class HighlightUsagesHandler extends HighlightHandlerBase { TextAttributes attributes, boolean clearHighlights) { List textRanges = new ArrayList(refs.size()); for (PsiReference ref : refs) { - TextRange range = getRangeToHighlight(ref); - textRanges.add(range); + textRanges.addAll(getRangesToHighlight(ref)); } highlightRanges(highlightManager, editor, attributes, clearHighlights, textRanges); } - public static TextRange getRangeToHighlight(final PsiReference ref) { - PsiElement element = ref.getElement(); - TextRange rangeInElement = ref.getRangeInElement(); - TextRange range = element.getTextRange().cutOut(rangeInElement); - // injection occurs - range = InjectedLanguageManager.getInstance(element.getProject()).injectedToHost(element, range); - return range; + public static List getRangesToHighlight(final PsiReference ref) { + final List relativeRanges = ReferenceRange.getRanges(ref); + List answer = new ArrayList(relativeRanges.size()); + for (TextRange relativeRange : relativeRanges) { + PsiElement element = ref.getElement(); + TextRange range = element.getTextRange().cutOut(relativeRange); + // injection occurs + answer.add(InjectedLanguageManager.getInstance(element.getProject()).injectedToHost(element, range)); + + } + return answer; } @Nullable