summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/IdentifierHighlighterPass.java
diff options
context:
space:
mode:
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.java32
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