diff options
author | Tobias Schwarz | 2014-01-28 07:24:05 +0000 |
---|---|---|
committer | Tobias Schwarz | 2014-01-28 07:24:05 +0000 |
commit | 10e21a359e19ce80f256027ea0a453eeff314645 (patch) | |
tree | 80956b2b14ae7314ba36d01205e8a931979bf2fa /target_explorer/plugins | |
parent | 7acd502c496c272f781512fe2779caddbc81fc9f (diff) | |
download | org.eclipse.tcf-10e21a359e19ce80f256027ea0a453eeff314645.tar.gz org.eclipse.tcf-10e21a359e19ce80f256027ea0a453eeff314645.tar.xz org.eclipse.tcf-10e21a359e19ce80f256027ea0a453eeff314645.zip |
Target Explorer: add callback to be able to wait for debugger start
Diffstat (limited to 'target_explorer/plugins')
6 files changed, 81 insertions, 31 deletions
diff --git a/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/delegates/LaunchConfigurationDelegate.java b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/delegates/LaunchConfigurationDelegate.java index 2f42f7603..529eec42b 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/delegates/LaunchConfigurationDelegate.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/delegates/LaunchConfigurationDelegate.java @@ -186,6 +186,7 @@ public class LaunchConfigurationDelegate extends org.eclipse.debug.core.model.La // Set the launch completed here. Doesn't matter if the launch might completed with error or not. launch.setAttribute(ICommonLaunchAttributes.ILAUNCH_ATTRIBUTE_LAUNCH_SEQUENCE_COMPLETED, Boolean.TRUE.toString()); + onLaunchFinished(launch, status != null ? status : Status.OK_STATUS); long endTime = System.currentTimeMillis(); CoreBundleActivator.getTraceHandler().trace("LaunchConfigurationDelegate#launch: *** DONE" //$NON-NLS-1$ @@ -306,4 +307,8 @@ public class LaunchConfigurationDelegate extends org.eclipse.debug.core.model.La public IBreakpoint[] getBreakpoints(ILaunchConfiguration configuration) { return super.getBreakpoints(configuration); } + + protected void onLaunchFinished(ILaunch launch, IStatus status) { + + } } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/Launch.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/Launch.java index e69a77847..0654b4e63 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/Launch.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/Launch.java @@ -18,6 +18,7 @@ import java.util.Map; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.tcf.internal.debug.model.TCFLaunch; @@ -26,9 +27,11 @@ import org.eclipse.tcf.protocol.IToken; import org.eclipse.tcf.services.IPathMap; import org.eclipse.tcf.services.IPathMap.DoneSet; import org.eclipse.tcf.services.IPathMap.PathMapRule; +import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback; import org.eclipse.tcf.te.runtime.interfaces.properties.IPropertiesContainer; import org.eclipse.tcf.te.runtime.properties.PropertiesContainer; import org.eclipse.tcf.te.runtime.services.ServiceManager; +import org.eclipse.tcf.te.runtime.utils.StatusHelper; import org.eclipse.tcf.te.tcf.core.Tcf; import org.eclipse.tcf.te.tcf.core.interfaces.IChannelManager; import org.eclipse.tcf.te.tcf.core.interfaces.IPathMapGeneratorService; @@ -42,6 +45,8 @@ import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode; */ public final class Launch extends TCFLaunch { + private ICallback callback = null; + /** * Non-notifying properties container used for data exchange between the steps. */ @@ -65,13 +70,22 @@ public final class Launch extends TCFLaunch { super(configuration, mode); } + public void setCallback(ICallback callback) { + this.callback = callback; + } + + public ICallback getCallback() { + return callback; + } + /** * Attach the tcf debugger to the given peer model node. * * @param node The peer model node. Must not be <code>null</code>. */ - public void attachDebugger(IPeerNode node) { + public void attachDebugger(IPeerNode node, final ICallback callback) { Assert.isNotNull(node); + Assert.isNotNull(callback); final String name = node.getPeer().getName(); @@ -83,8 +97,33 @@ public final class Launch extends TCFLaunch { @Override public void doneOpenChannel(Throwable error, IChannel channel) { if (error == null && channel != null) { + LaunchListener listener = new LaunchListener() { + @Override + public void onProcessStreamError(TCFLaunch launch, String process_id, int stream_id, Exception error, int lost_size) { + } + @Override + public void onProcessOutput(TCFLaunch launch, String process_id, int stream_id, byte[] data) { + } + @Override + public void onDisconnected(TCFLaunch launch) { + callback.done(Launch.this, StatusHelper.getStatus(Launch.this.getError())); + removeListener(this); + } + @Override + public void onCreated(TCFLaunch launch) { + } + @Override + public void onConnected(TCFLaunch launch) { + callback.done(Launch.this, Status.OK_STATUS); + removeListener(this); + } + }; + addListener(listener); launchTCF(getLaunchMode(), name, channel); } + else { + callback.done(Launch.this, StatusHelper.getStatus(error)); + } } }); } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/LaunchConfigurationDelegate.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/LaunchConfigurationDelegate.java index 082872250..67947cdee 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/LaunchConfigurationDelegate.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/LaunchConfigurationDelegate.java @@ -57,4 +57,17 @@ public class LaunchConfigurationDelegate extends org.eclipse.tcf.te.launch.core. } }.getE(); } + + /* (non-Javadoc) + * @see org.eclipse.tcf.te.launch.core.delegates.LaunchConfigurationDelegate#onLaunchFinished(org.eclipse.debug.core.ILaunch, org.eclipse.core.runtime.IStatus) + */ + @Override + protected void onLaunchFinished(ILaunch launch, IStatus status) { + super.onLaunchFinished(launch, status); + if (launch instanceof Launch) { + if (((Launch)launch).getCallback() != null) { + ((Launch)launch).getCallback().done(launch, status); + } + } + } } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/AttachDebuggerStep.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/AttachDebuggerStep.java index 425c76b69..f1727c9ce 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/AttachDebuggerStep.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/AttachDebuggerStep.java @@ -10,7 +10,6 @@ package org.eclipse.tcf.te.tcf.launch.core.steps; import org.eclipse.core.runtime.IProgressMonitor; -import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunch; import org.eclipse.tcf.protocol.Protocol; import org.eclipse.tcf.te.runtime.interfaces.callback.ICallback; @@ -36,30 +35,20 @@ public class AttachDebuggerStep extends AbstractTcfLaunchStep { */ @Override public void execute(final IStepContext context, final IPropertiesContainer data, final IFullQualifiedId fullQualifiedId, final IProgressMonitor monitor, final ICallback callback) { - if (Protocol.isDispatchThread()) { - internalExecute(context, data, fullQualifiedId, monitor, callback); - } - else { - Protocol.invokeLater(new Runnable() { - @Override - public void run() { - internalExecute(context, data, fullQualifiedId, monitor, callback); + final ILaunch launch = getLaunch(context); + Protocol.invokeLater(new Runnable() { + @Override + public void run() { + if (launch instanceof Launch) { + Launch tcfLaunch = (Launch)launch; + try { + tcfLaunch.attachDebugger(getActivePeerModelContext(context, data, fullQualifiedId), callback); + } + catch (Exception e) { + callback(data, fullQualifiedId, callback, StatusHelper.getStatus(e), null); + } } - }); - } - } - - protected void internalExecute(IStepContext context, final IPropertiesContainer data, final IFullQualifiedId fullQualifiedId, final IProgressMonitor monitor, final ICallback callback) { - ILaunch launch = getLaunch(context); - if (launch instanceof Launch) { - Launch tcfLaunch = (Launch)launch; - try { - tcfLaunch.attachDebugger(getActivePeerModelContext(context, data, fullQualifiedId)); - callback.done(this, Status.OK_STATUS); - } - catch (Exception e) { - callback.done(this, StatusHelper.getStatus(e)); } - } + }); } } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.ui/src/org/eclipse/tcf/te/tcf/launch/ui/internal/services/DebugService.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.ui/src/org/eclipse/tcf/te/tcf/launch/ui/internal/services/DebugService.java index 8e3df6862..4a6866a5f 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.ui/src/org/eclipse/tcf/te/tcf/launch/ui/internal/services/DebugService.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.ui/src/org/eclipse/tcf/te/tcf/launch/ui/internal/services/DebugService.java @@ -37,6 +37,7 @@ import org.eclipse.tcf.te.runtime.model.interfaces.IModelNode; import org.eclipse.tcf.te.runtime.services.AbstractService; import org.eclipse.tcf.te.runtime.services.interfaces.IDebugService; import org.eclipse.tcf.te.runtime.utils.StatusHelper; +import org.eclipse.tcf.te.tcf.launch.core.delegates.Launch; import org.eclipse.tcf.te.tcf.launch.core.interfaces.ILaunchTypes; import org.eclipse.tcf.te.ui.swt.DisplayUtil; @@ -127,7 +128,12 @@ public class DebugService extends AbstractService implements IDebugService { if (launch != null && finConfig.equals(launch.getLaunchConfiguration())) { DebugPlugin.getDefault().getLaunchManager().removeLaunchListener(this); callback.setProperty("launch", launch); //$NON-NLS-1$ - callback.done(this, Status.OK_STATUS); + if (launch instanceof Launch) { + ((Launch)launch).setCallback(callback); + } + else { + callback.done(this, Status.OK_STATUS); + } } } diff --git a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/steps/StartDebuggerStep.java b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/steps/StartDebuggerStep.java index 59578b327..4278229d0 100644 --- a/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/steps/StartDebuggerStep.java +++ b/target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/steps/StartDebuggerStep.java @@ -77,7 +77,7 @@ public class StartDebuggerStep extends AbstractPeerNodeStep { final boolean autoAttachAll = value != null ? Boolean.parseBoolean(value) : false; if (StepperAttributeUtil.getBooleanProperty(IStepAttributes.ATTR_START_DEBUGGER, fullQualifiedId, data)) { - Runnable runnable = new Runnable() { + Protocol.invokeLater(new Runnable() { @Override public void run() { // Don't attach the debugger if no run control is provided by the target @@ -131,10 +131,8 @@ public class StartDebuggerStep extends AbstractPeerNodeStep { } else { callback(data, fullQualifiedId, callback, Status.OK_STATUS, null); } - } - }; - - Protocol.invokeLater(runnable); + } + }); } else { callback(data, fullQualifiedId, callback, Status.OK_STATUS, null); |