mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-87369 Right-click on a breakpoint: "edit" action is disabled if the cursor is not on the corresponding line
This commit is contained in:
+59
-62
@@ -25,6 +25,7 @@ import com.intellij.debugger.engine.events.DebuggerCommandImpl;
|
||||
import com.intellij.debugger.engine.requests.RequestManagerImpl;
|
||||
import com.intellij.debugger.impl.DebuggerContextImpl;
|
||||
import com.intellij.debugger.settings.DebuggerSettings;
|
||||
import com.intellij.debugger.ui.JavaDebuggerSupport;
|
||||
import com.intellij.idea.ActionsBundle;
|
||||
import com.intellij.openapi.actionSystem.ActionGroup;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
@@ -49,6 +50,7 @@ import com.intellij.psi.PsiManager;
|
||||
import com.intellij.psi.jsp.JspFile;
|
||||
import com.intellij.ui.classFilter.ClassFilter;
|
||||
import com.intellij.util.StringBuilderSpinAllocator;
|
||||
import com.intellij.xdebugger.impl.DebuggerSupport;
|
||||
import com.intellij.xdebugger.impl.actions.EditBreakpointAction;
|
||||
import com.intellij.xdebugger.impl.actions.ViewBreakpointsAction;
|
||||
import com.intellij.xdebugger.impl.actions.XDebuggerActions;
|
||||
@@ -594,67 +596,6 @@ public abstract class BreakpointWithHighlighter extends Breakpoint {
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private ActionGroup createMenuActions() {
|
||||
final BreakpointManager breakpointManager = DebuggerManagerEx.getInstanceEx(myProject).getBreakpointManager();
|
||||
/**
|
||||
* Used from Popup Menu
|
||||
*/
|
||||
class RemoveAction extends AnAction {
|
||||
@Nullable private Breakpoint myBreakpoint;
|
||||
|
||||
public RemoveAction(Breakpoint breakpoint) {
|
||||
super(DebuggerBundle.message("action.remove.text"));
|
||||
myBreakpoint = breakpoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
if (myBreakpoint != null) {
|
||||
breakpointManager.removeBreakpoint(myBreakpoint);
|
||||
myBreakpoint = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used from Popup Menu
|
||||
*/
|
||||
class SetEnabledAction extends AnAction {
|
||||
private final boolean myNewValue;
|
||||
private final Breakpoint myBreakpoint;
|
||||
|
||||
public SetEnabledAction(Breakpoint breakpoint, boolean newValue) {
|
||||
super(newValue ? DebuggerBundle.message("action.enable.text") : DebuggerBundle.message("action.disable.text"));
|
||||
myBreakpoint = breakpoint;
|
||||
myNewValue = newValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
myBreakpoint.ENABLED = myNewValue;
|
||||
breakpointManager.fireBreakpointChanged(myBreakpoint);
|
||||
myBreakpoint.updateUI();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
AnAction viewBreakpointsAction =
|
||||
new ViewBreakpointsAction(ActionsBundle.actionText(XDebuggerActions.VIEW_BREAKPOINTS), this);
|
||||
|
||||
DefaultActionGroup group = new DefaultActionGroup();
|
||||
RangeHighlighter highlighter = getHighlighter();
|
||||
if (highlighter != null) {
|
||||
group.add(new EditBreakpointAction());
|
||||
group.addSeparator();
|
||||
}
|
||||
group.add(new SetEnabledAction(this, !ENABLED));
|
||||
group.add(new RemoveAction(this));
|
||||
group.addSeparator();
|
||||
group.add(viewBreakpointsAction);
|
||||
return group;
|
||||
}
|
||||
|
||||
private class MyGutterIconRenderer extends GutterIconRenderer {
|
||||
private final Icon myIcon;
|
||||
private final String myDescription;
|
||||
@@ -699,7 +640,63 @@ public abstract class BreakpointWithHighlighter extends Breakpoint {
|
||||
|
||||
@Override
|
||||
public ActionGroup getPopupMenuActions() {
|
||||
return createMenuActions();
|
||||
final BreakpointManager breakpointManager = DebuggerManagerEx.getInstanceEx(myProject).getBreakpointManager();
|
||||
/**
|
||||
* Used from Popup Menu
|
||||
*/
|
||||
class RemoveAction extends AnAction {
|
||||
@Nullable private Breakpoint myBreakpoint;
|
||||
|
||||
public RemoveAction(Breakpoint breakpoint) {
|
||||
super(DebuggerBundle.message("action.remove.text"));
|
||||
myBreakpoint = breakpoint;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
if (myBreakpoint != null) {
|
||||
breakpointManager.removeBreakpoint(myBreakpoint);
|
||||
myBreakpoint = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Used from Popup Menu
|
||||
*/
|
||||
class SetEnabledAction extends AnAction {
|
||||
private final boolean myNewValue;
|
||||
private final Breakpoint myBreakpoint;
|
||||
|
||||
public SetEnabledAction(Breakpoint breakpoint, boolean newValue) {
|
||||
super(newValue ? DebuggerBundle.message("action.enable.text") : DebuggerBundle.message("action.disable.text"));
|
||||
myBreakpoint = breakpoint;
|
||||
myNewValue = newValue;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
myBreakpoint.ENABLED = myNewValue;
|
||||
breakpointManager.fireBreakpointChanged(myBreakpoint);
|
||||
myBreakpoint.updateUI();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
AnAction viewBreakpointsAction =
|
||||
new ViewBreakpointsAction(ActionsBundle.actionText(XDebuggerActions.VIEW_BREAKPOINTS), BreakpointWithHighlighter.this);
|
||||
|
||||
DefaultActionGroup group = new DefaultActionGroup();
|
||||
RangeHighlighter highlighter = getHighlighter();
|
||||
if (highlighter != null) {
|
||||
group.add(new EditBreakpointAction.ContextAction(this, BreakpointWithHighlighter.this, DebuggerSupport.getDebuggerSupport(JavaDebuggerSupport.class)));
|
||||
group.addSeparator();
|
||||
}
|
||||
group.add(new SetEnabledAction(BreakpointWithHighlighter.this, !ENABLED));
|
||||
group.add(new RemoveAction(BreakpointWithHighlighter.this));
|
||||
group.addSeparator();
|
||||
group.add(viewBreakpointsAction);
|
||||
return group;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -104,4 +104,15 @@ public abstract class DebuggerSupport {
|
||||
|
||||
@NotNull
|
||||
public abstract EditBreakpointActionHandler getEditBreakpointAction();
|
||||
|
||||
|
||||
@Nullable
|
||||
public static <T extends DebuggerSupport> DebuggerSupport getDebuggerSupport(Class<T> aClass) {
|
||||
for (DebuggerSupport support : getDebuggerSupports()) {
|
||||
if (support.getClass() == aClass) {
|
||||
return support;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
+30
-1
@@ -16,13 +16,42 @@
|
||||
package com.intellij.xdebugger.impl.actions;
|
||||
|
||||
import com.intellij.idea.ActionsBundle;
|
||||
import com.intellij.openapi.actionSystem.AnAction;
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.editor.markup.GutterIconRenderer;
|
||||
import com.intellij.xdebugger.impl.DebuggerSupport;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EditBreakpointAction extends XDebuggerActionBase {
|
||||
|
||||
public static class ContextAction extends AnAction {
|
||||
private final GutterIconRenderer myRenderer;
|
||||
private final Object myBreakpoint;
|
||||
private DebuggerSupport myDebuggerSupport;
|
||||
|
||||
public ContextAction(GutterIconRenderer breakpointRenderer, Object breakpoint, DebuggerSupport debuggerSupport) {
|
||||
myRenderer = breakpointRenderer;
|
||||
myBreakpoint = breakpoint;
|
||||
myDebuggerSupport = debuggerSupport;
|
||||
initPresentation(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
final Editor editor = PlatformDataKeys.EDITOR.getData(e.getDataContext());
|
||||
if (editor == null) return;
|
||||
myDebuggerSupport.getEditBreakpointAction().editBreakpoint(getEventProject(e), editor, myBreakpoint, myRenderer);
|
||||
}
|
||||
}
|
||||
|
||||
public EditBreakpointAction() {
|
||||
getTemplatePresentation().setText(ActionsBundle.actionText("EditBreakpoint"));
|
||||
initPresentation(this);
|
||||
}
|
||||
|
||||
private static void initPresentation(AnAction action) {
|
||||
action.getTemplatePresentation().setText(ActionsBundle.actionText("EditBreakpoint"));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+4
@@ -53,6 +53,10 @@ public abstract class EditBreakpointActionHandler extends DebuggerActionHandler
|
||||
GutterIconRenderer breakpointGutterRenderer = pair.first;
|
||||
|
||||
if (breakpointGutterRenderer == null) return;
|
||||
editBreakpoint(project, editor, breakpoint, breakpointGutterRenderer);
|
||||
}
|
||||
|
||||
public void editBreakpoint(@NotNull Project project, @NotNull Editor editor, @NotNull Object breakpoint, @NotNull GutterIconRenderer breakpointGutterRenderer) {
|
||||
EditorGutterComponentEx gutterComponent = ((EditorEx)editor).getGutterComponentEx();
|
||||
Point point = gutterComponent.getPoint(breakpointGutterRenderer);
|
||||
if (point == null) return;
|
||||
|
||||
+4
-1
@@ -37,7 +37,9 @@ import com.intellij.xdebugger.breakpoints.SuspendPolicy;
|
||||
import com.intellij.xdebugger.breakpoints.XBreakpoint;
|
||||
import com.intellij.xdebugger.breakpoints.XBreakpointProperties;
|
||||
import com.intellij.xdebugger.breakpoints.XBreakpointType;
|
||||
import com.intellij.xdebugger.impl.DebuggerSupport;
|
||||
import com.intellij.xdebugger.impl.XDebugSessionImpl;
|
||||
import com.intellij.xdebugger.impl.XDebuggerSupport;
|
||||
import com.intellij.xdebugger.impl.XDebuggerUtilImpl;
|
||||
import com.intellij.xdebugger.impl.actions.EditBreakpointAction;
|
||||
import com.intellij.xdebugger.impl.actions.ViewBreakpointsAction;
|
||||
@@ -366,7 +368,8 @@ public class XBreakpointBase<Self extends XBreakpoint<P>, P extends XBreakpointP
|
||||
DefaultActionGroup group = new DefaultActionGroup();
|
||||
final XDebuggerManager debuggerManager = XDebuggerManager.getInstance(getProject());
|
||||
|
||||
group.add(new EditBreakpointAction());
|
||||
|
||||
group.add(new EditBreakpointAction.ContextAction(this, XBreakpointBase.this, DebuggerSupport.getDebuggerSupport(XDebuggerSupport.class)));
|
||||
|
||||
group.add(new Separator());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user