From 364298f46ad22d7ac21430265f30ca980cb2489d Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Thu, 6 Mar 2014 19:43:04 +0400 Subject: [PATCH] IDEA-121738 Shift-click in gutter doesn't create 'no suspend' breakpoint anymore --- .../com/intellij/xdebugger/XDebuggerUtil.java | 4 ++-- .../xdebugger/impl/XDebuggerUtilImpl.java | 12 ++++++++---- .../breakpoints/XLineBreakpointManager.java | 19 ++++++++++++++++++- 3 files changed, 28 insertions(+), 7 deletions(-) diff --git a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java index e33bcaf75b10..8bfae66e04be 100644 --- a/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java +++ b/platform/xdebugger-api/src/com/intellij/xdebugger/XDebuggerUtil.java @@ -47,7 +47,7 @@ public abstract class XDebuggerUtil { toggleLineBreakpoint(project, file, line, false); } - public abstract void toggleLineBreakpoint(@NotNull Project project, + public abstract XLineBreakpoint toggleLineBreakpoint(@NotNull Project project, @NotNull VirtualFile file, int line, boolean temporary); @@ -59,7 +59,7 @@ public abstract class XDebuggerUtil { toggleLineBreakpoint(project, type, file, line, false); } - public abstract

void toggleLineBreakpoint(@NotNull Project project, + public abstract

XLineBreakpoint toggleLineBreakpoint(@NotNull Project project, @NotNull XLineBreakpointType

type, @NotNull VirtualFile file, int line, diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java index 191b8f2b1cfb..ef1e8c519c69 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/XDebuggerUtilImpl.java @@ -25,6 +25,7 @@ import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Ref; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.impl.source.tree.injected.InjectedLanguageUtil; @@ -74,7 +75,7 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { } @Override - public void toggleLineBreakpoint(@NotNull final Project project, @NotNull final VirtualFile file, final int line, boolean temporary) { + public XLineBreakpoint toggleLineBreakpoint(@NotNull final Project project, @NotNull final VirtualFile file, final int line, boolean temporary) { XLineBreakpointType typeWinner = null; for (XLineBreakpointType type : getLineBreakpointTypes()) { if (type.canPutAt(file, line, project) && (typeWinner == null || type.getPriority() > typeWinner.getPriority())) { @@ -82,8 +83,9 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { } } if (typeWinner != null) { - toggleLineBreakpoint(project, typeWinner, file, line, temporary); + return toggleLineBreakpoint(project, typeWinner, file, line, temporary); } + return null; } @Override @@ -97,11 +99,12 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { } @Override - public

void toggleLineBreakpoint(@NotNull final Project project, + public

XLineBreakpoint toggleLineBreakpoint(@NotNull final Project project, @NotNull final XLineBreakpointType

type, @NotNull final VirtualFile file, final int line, final boolean temporary) { + final Ref res = new Ref(); new WriteAction() { @Override protected void run(@NotNull final Result result) { @@ -112,10 +115,11 @@ public class XDebuggerUtilImpl extends XDebuggerUtil { } else { P properties = type.createBreakpointProperties(file, line); - breakpointManager.addLineBreakpoint(type, file.getUrl(), line, properties, temporary); + res.set(breakpointManager.addLineBreakpoint(type, file.getUrl(), line, properties, temporary)); } } }.execute(); + return res.get(); } @Override diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointManager.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointManager.java index 3aab9e884b2d..6c49ba8b5feb 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointManager.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/breakpoints/XLineBreakpointManager.java @@ -26,6 +26,7 @@ import com.intellij.openapi.editor.colors.EditorColorsAdapter; import com.intellij.openapi.editor.colors.EditorColorsManager; import com.intellij.openapi.editor.colors.EditorColorsScheme; import com.intellij.openapi.editor.event.*; +import com.intellij.openapi.editor.ex.EditorEx; import com.intellij.openapi.editor.ex.util.EditorUtil; import com.intellij.openapi.editor.markup.MarkupEditorFilterFactory; import com.intellij.openapi.editor.markup.RangeHighlighter; @@ -49,7 +50,10 @@ import com.intellij.util.ui.update.MergingUpdateQueue; import com.intellij.util.ui.update.Update; import com.intellij.xdebugger.XDebuggerManager; import com.intellij.xdebugger.XDebuggerUtil; +import com.intellij.xdebugger.breakpoints.SuspendPolicy; import com.intellij.xdebugger.breakpoints.XBreakpoint; +import com.intellij.xdebugger.breakpoints.XLineBreakpoint; +import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; import gnu.trove.TIntHashSet; import org.jetbrains.annotations.NotNull; @@ -271,7 +275,20 @@ public class XLineBreakpointManager { @Override public void run() { if (!myProject.isDisposed() && myProject.isInitialized() && file.isValid()) { - XDebuggerUtil.getInstance().toggleLineBreakpoint(myProject, file, line, mouseEvent.isAltDown()); + XLineBreakpoint breakpoint = + XDebuggerUtil.getInstance().toggleLineBreakpoint(myProject, file, line, mouseEvent.isAltDown()); + if (!mouseEvent.isAltDown() && mouseEvent.isShiftDown() && breakpoint != null) { + breakpoint.setSuspendPolicy(SuspendPolicy.NONE); + String selection = editor.getSelectionModel().getSelectedText(); + if (selection != null) { + breakpoint.setLogExpression(selection); + } + else { + breakpoint.setLogMessage(true); + } + // edit breakpoint + DebuggerUIUtil.showXBreakpointEditorBalloon(myProject, mouseEvent.getPoint(), ((EditorEx)editor).getGutterComponentEx(), false, breakpoint); + } } } });