diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java index 934e627b4d7b..e5d0865d114c 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/CaptureConfigurable.java @@ -30,7 +30,9 @@ import com.intellij.openapi.util.JDOMUtil; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileWrapper; import com.intellij.psi.PsiAnnotation; +import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiModifierListOwner; +import com.intellij.psi.PsiParameter; import com.intellij.serviceContainer.AlreadyDisposedException; import com.intellij.ui.*; import com.intellij.ui.table.JBTable; @@ -484,7 +486,8 @@ public final class CaptureConfigurable implements SearchableConfigurable, NoScro try { getAsyncAnnotations(debuggerProjectSettings, capture) .forEach(annotationName -> NodeRendererSettings.visitAnnotatedElements(annotationName, project, - (e, annotation) -> consumer.accept(capture, e, annotation))); + (e, annotation) -> consumer.accept(capture, e, annotation), + PsiMethod.class, PsiParameter.class)); } catch (IndexNotReadyException | ProcessCanceledException | AlreadyDisposedException ignore) { } diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java index 2322d435c06a..1eb97731858f 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java @@ -1,6 +1,7 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. package com.intellij.debugger.settings; +import com.intellij.codeInsight.AnnotationUtil; import com.intellij.debugger.DebuggerContext; import com.intellij.debugger.JavaDebuggerBundle; import com.intellij.debugger.engine.DebugProcess; @@ -35,8 +36,8 @@ import com.intellij.openapi.util.WriteExternalException; import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.*; -import com.intellij.psi.impl.java.stubs.index.JavaAnnotationIndex; import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.psi.search.searches.AnnotatedElementsSearch; import com.intellij.util.EventDispatcher; import com.intellij.util.IncorrectOperationException; import com.intellij.xdebugger.frame.presentation.XValuePresentation; @@ -50,7 +51,6 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.ArrayList; -import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.function.BiConsumer; @@ -279,7 +279,7 @@ public class NodeRendererSettings implements PersistentStateComponent { renderer.setEnabled(true); renderers.add(renderer); } - }); + }, PsiClass.class); } catch (IndexNotReadyException | ProcessCanceledException ignore) { } @@ -589,21 +589,17 @@ public class NodeRendererSettings implements PersistentStateComponent { } } - static void visitAnnotatedElements(String annotationFqn, - Project project, - BiConsumer consumer) { - Collection annotations = - ReadAction.compute( - () -> JavaAnnotationIndex.getInstance().getAnnotations(StringUtil.getShortName(annotationFqn), project, GlobalSearchScope.allScope(project))); - annotations.forEach(annotation -> ReadAction.run(() -> { - if (!annotation.isValid()) return; - PsiElement parent = annotation.getContext(); - if (parent instanceof PsiModifierList) { - PsiElement owner = parent.getParent(); - if (owner instanceof PsiModifierListOwner && annotationFqn.equals(annotation.getQualifiedName())) { - consumer.accept((PsiModifierListOwner)owner, annotation); - } - } - })); + static void visitAnnotatedElements(String annotationFqn, + Project project, + BiConsumer consumer, + Class @NotNull ... types) { + ReadAction.run(() -> { + PsiClass annotationClass = JavaPsiFacade.getInstance(project).findClass(annotationFqn, GlobalSearchScope.allScope(project)); + if (annotationClass == null) return; + AnnotatedElementsSearch.searchElements(annotationClass, GlobalSearchScope.allScope(project), types) + .forEach((PsiModifierListOwner owner) -> { + consumer.accept(owner, AnnotationUtil.findAnnotation(owner, annotationFqn)); + }); + }); } }