Bug 569135 - "Toggle Tracepoint" should use ruler position
- don't use command that uses editor selection by default, use
ToggleBreakpointAdapter directly and supply selection from ruler.
- don't use or change viewer.setSelectedRange() in
ToggleBreakpointAdapter, use given selection for evaluating.
Change-Id: Iace46d3a3a6e4959c9d69d5e92c159f2b9d54601
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/RulerToggleTracepointActionDelegate.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/RulerToggleTracepointActionDelegate.java
index 6edd6a7..fbc6c44 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/RulerToggleTracepointActionDelegate.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/RulerToggleTracepointActionDelegate.java
@@ -13,28 +13,25 @@
*******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.actions;
-import org.eclipse.core.commands.Command;
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.ExecutionException;
-import org.eclipse.core.commands.NotEnabledException;
-import org.eclipse.core.commands.NotHandledException;
-import org.eclipse.core.commands.common.NotDefinedException;
+import org.eclipse.core.runtime.CoreException;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.IDocument;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.text.source.IVerticalRulerInfo;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.IActionDelegate2;
import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.commands.ICommandService;
-import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.texteditor.AbstractRulerActionDelegate;
+import org.eclipse.ui.texteditor.IDocumentProvider;
import org.eclipse.ui.texteditor.ITextEditor;
public class RulerToggleTracepointActionDelegate extends AbstractRulerActionDelegate implements IActionDelegate2 {
- private static final String TOGGLE_TRACEPOINT_COMMAND = "org.eclipse.jdt.debug.ui.commands.ToggleTracepoint"; //$NON-NLS-1$
private IEditorPart currentEditor;
private IAction dummyAction;
@@ -64,19 +61,47 @@
@Override
public void runWithEvent(IAction action, Event event) {
- if (currentEditor == null) {
+ if (!(currentEditor instanceof ITextEditor)) {
return;
}
- IWorkbenchPartSite partSite = currentEditor.getSite();
- IHandlerService hservice = partSite.getService(IHandlerService.class);
- ICommandService cservice = partSite.getService(ICommandService.class);
+ IVerticalRulerInfo rulerInfo = currentEditor.getAdapter(IVerticalRulerInfo.class);
+ if (rulerInfo == null) {
+ return;
+ }
+ int lineOfLastMouseButtonActivity = rulerInfo.getLineOfLastMouseButtonActivity();
+ if (lineOfLastMouseButtonActivity < 0) {
+ return;
+ }
+ IDocument document = getDocument((ITextEditor) currentEditor);
+ if (document == null) {
+ return;
+ }
+ ToggleBreakpointAdapter toggle = new ToggleBreakpointAdapter();
try {
- Command command = cservice.getCommand(TOGGLE_TRACEPOINT_COMMAND);
- ExecutionEvent exevent = hservice.createExecutionEvent(command, event);
- command.executeWithChecks(exevent);
- } catch (ExecutionException | NotDefinedException | NotEnabledException | NotHandledException e) {
+ ITextSelection selection = getTextSelection(document, lineOfLastMouseButtonActivity);
+ if (toggle.canToggleLineBreakpoints(currentEditor, selection)) {
+ BreakpointToggleUtils.setUnsetTracepoints(true);
+ toggle.toggleBreakpoints(currentEditor, selection);
+ }
+ } catch (BadLocationException | CoreException e) {
DebugUIPlugin.log(e);
}
}
+ private static IDocument getDocument(ITextEditor editor) {
+ IDocumentProvider provider = editor.getDocumentProvider();
+ if (provider != null) {
+ return provider.getDocument(editor.getEditorInput());
+ }
+ IDocument doc = editor.getAdapter(IDocument.class);
+ if (doc != null) {
+ return doc;
+ }
+ return null;
+ }
+
+ private static ITextSelection getTextSelection(IDocument document, int line) throws BadLocationException {
+ IRegion region = document.getLineInformation(line);
+ return new TextSelection(document, region.getOffset(), 0);
+ }
}
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
index 1487edb..6802a03 100644
--- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
+++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/ui/actions/ToggleBreakpointAdapter.java
@@ -1615,10 +1615,8 @@
IDocument document = documentProvider.getDocument(editor.getEditorInput());
try {
IRegion line = document.getLineInformation(textSelection.getStartLine() + 1);
- Point selectedRange = viewer.getSelectedRange();
- viewer.setSelectedRange(selectedRange.x, 0);
+ Point selectedRange = new Point(textSelection.getOffset(), textSelection.getLength());
statementEngine.complete(viewer, selectedRange, line.getOffset(), cunit);
- viewer.setSelectedRange(selectedRange.x, selectedRange.y);
TemplateProposal[] templateProposals = statementEngine.getResults();
for (TemplateProposal templateProposal : templateProposals) {
Template template = templateProposal.getTemplate();