mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[performance] IDEA-340303 There is no need to cache references in HyperlinkAnnotator
GitOrigin-RevId: cc80b90115a134a03ec5064169521442c0e7b0c4
This commit is contained in:
committed by
intellij-monorepo-bot
parent
3266b134fb
commit
9b05a93fbc
+13
-18
@@ -19,9 +19,6 @@ import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiReference;
|
||||
import com.intellij.psi.PsiReferenceService;
|
||||
import com.intellij.psi.PsiReferenceService.Hints;
|
||||
import com.intellij.psi.util.CachedValueProvider.Result;
|
||||
import com.intellij.psi.util.CachedValuesManager;
|
||||
import com.intellij.psi.util.PsiModificationTracker;
|
||||
import com.intellij.util.containers.ContainerUtil;
|
||||
import org.jetbrains.annotations.ApiStatus;
|
||||
import org.jetbrains.annotations.Nls;
|
||||
@@ -29,7 +26,6 @@ import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static com.intellij.util.containers.ContainerUtil.unmodifiableOrEmptyList;
|
||||
import static java.util.Objects.requireNonNull;
|
||||
|
||||
@ApiStatus.NonExtendable
|
||||
@@ -41,15 +37,17 @@ public class HyperlinkAnnotator implements Annotator {
|
||||
public void annotate(@NotNull PsiElement element, @NotNull AnnotationHolder holder) {
|
||||
if (holder.isBatchMode()) return;
|
||||
|
||||
for (PsiHighlightedReference reference : PsiSymbolReferenceService.getService().getReferences(element, PsiHighlightedReference.class)) {
|
||||
TextRange range = reference.getAbsoluteRange();
|
||||
String message = reference.highlightMessage();
|
||||
AnnotationBuilder annotationBuilder = message == null ? holder.newSilentAnnotation(reference.highlightSeverity())
|
||||
: holder.newAnnotation(reference.highlightSeverity(), message);
|
||||
reference.highlightReference(annotationBuilder.range(range)).create();
|
||||
}
|
||||
|
||||
if (WebReference.isWebReferenceWorthy(element)) {
|
||||
// asking for references on every element is too expensive, only ask for it on potential external reference hosts
|
||||
// not only slow, but also creates a lot of cached values and SoftReference instances in all elements
|
||||
for (PsiHighlightedReference reference : PsiSymbolReferenceService.getService().getReferences(element, PsiHighlightedReference.class)) {
|
||||
TextRange range = reference.getAbsoluteRange();
|
||||
String message = reference.highlightMessage();
|
||||
AnnotationBuilder annotationBuilder = message == null ? holder.newSilentAnnotation(reference.highlightSeverity())
|
||||
: holder.newAnnotation(reference.highlightSeverity(), message);
|
||||
reference.highlightReference(annotationBuilder.range(range)).create();
|
||||
}
|
||||
|
||||
annotateContributedReferences(element, holder);
|
||||
}
|
||||
}
|
||||
@@ -69,12 +67,9 @@ public class HyperlinkAnnotator implements Annotator {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static List<PsiReference> getReferences(@NotNull PsiElement element) {
|
||||
return CachedValuesManager.getCachedValue(element, () -> {
|
||||
List<PsiReference> references = PsiReferenceService.getService().getReferences(element, Hints.HIGHLIGHTED_REFERENCES);
|
||||
return Result.create(unmodifiableOrEmptyList(references), PsiModificationTracker.MODIFICATION_COUNT);
|
||||
});
|
||||
private static @NotNull List<PsiReference> getReferences(@NotNull PsiElement element) {
|
||||
// there is very little sense in caching them here
|
||||
return PsiReferenceService.getService().getReferences(element, Hints.HIGHLIGHTED_REFERENCES);
|
||||
}
|
||||
|
||||
private static boolean annotateHyperlinks(@NotNull PsiElement element,
|
||||
|
||||
Reference in New Issue
Block a user