[debugger] Add information about instrumentation into tooltip and change icon in internal mode

IDEA-370744

GitOrigin-RevId: 722588b3ca4394e99c818229861a6cd479e19ce5
This commit is contained in:
Alexey.Merkulov
2026-02-11 20:28:37 +00:00
committed by intellij-monorepo-bot
parent 68861d943b
commit bf4af1f8a4
2 changed files with 30 additions and 0 deletions
@@ -9,13 +9,16 @@ import com.intellij.debugger.SourcePosition;
import com.intellij.debugger.engine.DebugProcess;
import com.intellij.debugger.engine.DebugProcessImpl;
import com.intellij.debugger.engine.DebuggerManagerThreadImpl;
import com.intellij.debugger.engine.InstrumentationBreakpointState;
import com.intellij.debugger.engine.JVMNameUtil;
import com.intellij.debugger.engine.JavaDebugProcess;
import com.intellij.debugger.engine.events.DebuggerCommandImpl;
import com.intellij.debugger.engine.requests.RequestManagerImpl;
import com.intellij.debugger.impl.DebuggerContextImpl;
import com.intellij.debugger.impl.DebuggerSession;
import com.intellij.debugger.impl.DebuggerUtilsEx;
import com.intellij.debugger.jdi.VirtualMachineProxyImpl;
import com.intellij.debugger.settings.DebuggerSettings;
import com.intellij.debugger.statistics.StatisticsStorage;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.application.AccessToken;
@@ -32,6 +35,7 @@ import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiFile;
import com.intellij.psi.jsp.JspFile;
import com.intellij.ui.LayeredIcon;
import com.intellij.ui.classFilter.ClassFilter;
import com.intellij.util.ObjectUtils;
import com.intellij.util.SlowOperations;
@@ -176,6 +180,21 @@ public abstract class BreakpointWithHighlighter<P extends JavaBreakpointProperti
return getVerifiedWarningsIcon(muted);
}
InstrumentationBreakpointState info = requestsManager.getInstrumentationInfo(this);
if (info != null && info.isInstrumentationModeEnabled() && ApplicationManager.getApplication().isInternal()) {
LayeredIcon newIcon = new LayeredIcon(2);
Icon breakpointIcon;
if (DebuggerSettings.SUSPEND_NONE.equals(getSuspendPolicy())) {
breakpointIcon = AllIcons.Debugger.Db_no_suspend_breakpoint;
}
else {
breakpointIcon = AllIcons.Debugger.Db_set_breakpoint;
}
newIcon.setIcon(breakpointIcon, 0);
newIcon.setIcon(AllIcons.Nodes.Module8x8, 1, 0, 0);
return newIcon;
}
if (isVerified) {
return getVerifiedIcon(muted);
}
@@ -246,6 +265,16 @@ public abstract class BreakpointWithHighlighter<P extends JavaBreakpointProperti
}
res.add(buf.toString());
}
DebuggerManagerEx debuggerManager = DebuggerManagerEx.getInstanceEx(myProject);
DebuggerSession activeDebuggerSession = debuggerManager.getContext().getDebuggerSession();
if (activeDebuggerSession != null) {
InstrumentationBreakpointState info = activeDebuggerSession.getProcess().getRequestsManager().getInstrumentationInfo(this);
if (info != null && info.isInstrumentationModeEnabled()) {
res.add(JavaDebuggerBundle.message("breakpoint.instrumented.note"));
}
}
return res;
}
@@ -344,6 +344,7 @@ breakpoint.properties.panel.option.instance.filters=&Instance filters:
breakpoint.property.name.pass.count=Pass count:
breakpoint.property.name.class.filters=Class filters:
breakpoint.property.name.instance.filters=Instance filters:
breakpoint.instrumented.note=Instrumented breakpoint
error.absent.exception.breakpoint.class.name=No class name for exception breakpoint
exception.breakpoint.console.message.location.info={0}:{1,number,#}
exception.breakpoint.console.message.location.info.absent=No Debug Info