diff options
author | Pawel Piech | 2012-10-19 17:04:58 +0000 |
---|---|---|
committer | Pawel Piech | 2012-10-19 17:06:59 +0000 |
commit | 95addf002e9cf536bc0b4de64854632d91cf6bfe (patch) | |
tree | e93b9ebdad97ebff928de9f062875b1656aec8b1 /plugins | |
parent | e3e569b894c779b39111a67147a2547ef4861873 (diff) | |
download | org.eclipse.tcf-95addf002e9cf536bc0b4de64854632d91cf6bfe.tar.gz org.eclipse.tcf-95addf002e9cf536bc0b4de64854632d91cf6bfe.tar.xz org.eclipse.tcf-95addf002e9cf536bc0b4de64854632d91cf6bfe.zip |
Bug 392473 - [reverse] Enable toggle reverse debugging action.
Diffstat (limited to 'plugins')
3 files changed, 87 insertions, 9 deletions
diff --git a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseDebuggingPropertyTester.java b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseDebuggingPropertyTester.java index 83757e1ed..a8eabb898 100644 --- a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseDebuggingPropertyTester.java +++ b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseDebuggingPropertyTester.java @@ -10,7 +10,12 @@ *******************************************************************************/ package org.eclipse.tcf.internal.cdt.ui.commands; +import java.util.concurrent.ExecutionException; + import org.eclipse.core.expressions.PropertyTester; +import org.eclipse.tcf.internal.cdt.ui.Activator; +import org.eclipse.tcf.internal.debug.ui.model.TCFNode; +import org.eclipse.tcf.util.TCFTask; /** @@ -19,9 +24,30 @@ import org.eclipse.core.expressions.PropertyTester; */ public class TCFReverseDebuggingPropertyTester extends PropertyTester { - public boolean test(Object receiver, String property, Object[] args, Object expectedValue) { - // TODO should be queried from target - return true; + private static final String ENABLED = "isReverseDebuggingEnabled"; //$NON-NLS-1$ + + public boolean test(Object context, String property, Object[] args, Object expectedValue) { + if (!ENABLED.equals(property)) return false; + + if (context instanceof TCFNode) { + final TCFNode node = (TCFNode)context; + try { + return new TCFTask<Boolean>() { + public void run() { + done(node.getModel().isInstructionSteppingEnabled()); + }; + }.get(); + } + catch (InterruptedException e) { + Activator.log(e); + return false; + } + catch (ExecutionException e) { + Activator.log(e); + return false; + } + } + return false; } } diff --git a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseToggleCommand.java b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseToggleCommand.java index 51381519b..cd1620bb0 100644 --- a/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseToggleCommand.java +++ b/plugins/org.eclipse.tcf.cdt.ui/src/org/eclipse/tcf/internal/cdt/ui/commands/TCFReverseToggleCommand.java @@ -10,9 +10,15 @@ *******************************************************************************/ package org.eclipse.tcf.internal.cdt.ui.commands; +import java.util.concurrent.ExecutionException; + import org.eclipse.cdt.debug.core.model.IReverseToggleHandler; import org.eclipse.debug.core.commands.IDebugCommandRequest; import org.eclipse.debug.core.commands.IEnabledStateRequest; +import org.eclipse.tcf.internal.cdt.ui.Activator; +import org.eclipse.tcf.internal.debug.ui.model.TCFNode; +import org.eclipse.tcf.protocol.Protocol; +import org.eclipse.tcf.util.TCFTask; /** * Toggles enablement for reverse run control support. @@ -20,12 +26,24 @@ import org.eclipse.debug.core.commands.IEnabledStateRequest; public class TCFReverseToggleCommand implements IReverseToggleHandler { public void canExecute(IEnabledStateRequest request) { - request.setEnabled(false); + request.setEnabled(true); request.done(); } - public boolean execute(IDebugCommandRequest request) { - return false; + public boolean execute(final IDebugCommandRequest request) { + if (request.getElements().length != 0 && request.getElements()[0] instanceof TCFNode) { + final TCFNode node = (TCFNode)request.getElements()[0]; + Protocol.invokeLater(new Runnable() { + public void run() { + boolean enabled = node.getModel().isInstructionSteppingEnabled(); + node.getModel().setInstructionSteppingEnabled(!enabled); + request.done(); + }; + }); + } else { + request.done(); + } + return true; } public boolean toggleNeedsUpdating() { @@ -33,8 +51,25 @@ public class TCFReverseToggleCommand implements IReverseToggleHandler { } public boolean isReverseToggled(Object context) { - // TODO should be queried from target - return true; + if (context instanceof TCFNode) { + final TCFNode node = (TCFNode)context; + try { + return new TCFTask<Boolean>() { + public void run() { + done(node.getModel().isInstructionSteppingEnabled()); + }; + }.get(); + } + catch (InterruptedException e) { + Activator.log(e); + return false; + } + catch (ExecutionException e) { + Activator.log(e); + return false; + } + } + return false; } } diff --git a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFModel.java b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFModel.java index b48cf88f8..7c38ec379 100644 --- a/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFModel.java +++ b/plugins/org.eclipse.tcf.debug.ui/src/org/eclipse/tcf/internal/debug/ui/model/TCFModel.java @@ -204,6 +204,8 @@ public class TCFModel implements ITCFModel, IElementContentProvider, IElementLab private int display_source_generation; private int suspend_trigger_generation; private int auto_disconnect_generation; + + private boolean reverse_debug_enabled; // Debugger preferences: private long min_view_updates_interval; @@ -313,7 +315,7 @@ public class TCFModel implements ITCFModel, IElementContentProvider, IElementLab }; private final IModelSelectionPolicy selection_policy; - + private IChannel channel; private TCFNodeLaunch launch_node; private boolean disposed; @@ -2011,4 +2013,19 @@ public class TCFModel implements ITCFModel, IElementContentProvider, IElementLab public boolean isInstructionSteppingEnabled() { return instruction_stepping_enabled; } + + /** + * Set whether reverse debugging should be enabled or not. + * @param enabled + */ + public void setReverseDebugEnabled(boolean enabled) { + reverse_debug_enabled = enabled; + } + + /** + * @return whether reverse debugging is enabled. + */ + public boolean isReverseDebugEnabled() { + return reverse_debug_enabled; + } } |