void (@NotNull PsiElement target, @NotNull PsiElement scopeElement, boolean withDeclarations, boolean detectAccess, @NotNull Collection<? super TextRange> readRanges, @NotNull Collection<? super TextRange> writeRanges) { ReadWriteAccessDetector detector = detectAccess ? ReadWriteAccessDetector.findDetector(target) : null; FindUsagesManager findUsagesManager = ((FindManagerImpl)FindManager.getInstance(target.getProject())).getFindUsagesManager(); FindUsagesHandler findUsagesHandler = findUsagesManager.getFindUsagesHandler(target, true); LocalSearchScope scope = new LocalSearchScope(scopeElement); Collection<PsiReference> refs = findUsagesHandler == null ? ReferencesSearch.search(target, scope).findAll() : findUsagesHandler.findReferencesToHighlight(target, scope); for (PsiReference psiReference : refs) { if (psiReference == null) { LOG.error("Null reference returned, findUsagesHandler=" + findUsagesHandler + "; target=" + target + " of " + target.getClass()); continue; } Collection<? super TextRange> destination; if (detector == null || detector.getReferenceAccess(target, psiReference) == ReadWriteAccessDetector.Access.Read) { destination = readRanges; } else { destination = writeRanges; } HighlightUsagesHandler.collectHighlightRanges(psiReference, destination); } if (withDeclarations) { TextRange declRange = HighlightUsagesHandler.getNameIdentifierRange(scopeElement.getContainingFile(), target); if (declRange != null) { if (detector != null && detector.isDeclarationWriteAccess(target)) { writeRanges.add(declRange); } else { readRanges.add(declRange); } } } }