mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Highlight usages supports MultiRangeReference (as seen in objective-c message passing).
This commit is contained in:
+3
-3
@@ -98,12 +98,12 @@ public class IdentifierHighlighterPass extends TextEditorHighlightingPass {
|
||||
final PsiElement finalMyTarget = myTarget;
|
||||
ReferencesSearch.search(myTarget, new LocalSearchScope(myFile)).forEach(new Processor<PsiReference>() {
|
||||
public boolean process(final PsiReference psiReference) {
|
||||
final TextRange textRange = HighlightUsagesHandler.getRangeToHighlight(psiReference);
|
||||
final List<TextRange> 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;
|
||||
}
|
||||
|
||||
+12
-9
@@ -365,19 +365,22 @@ public class HighlightUsagesHandler extends HighlightHandlerBase {
|
||||
TextAttributes attributes, boolean clearHighlights) {
|
||||
List<TextRange> textRanges = new ArrayList<TextRange>(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<TextRange> getRangesToHighlight(final PsiReference ref) {
|
||||
final List<TextRange> relativeRanges = ReferenceRange.getRanges(ref);
|
||||
List<TextRange> answer = new ArrayList<TextRange>(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
|
||||
|
||||
Reference in New Issue
Block a user