Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Schwarz2014-01-28 07:24:05 +0000
committerTobias Schwarz2014-01-28 07:24:05 +0000
commit10e21a359e19ce80f256027ea0a453eeff314645 (patch)
tree80956b2b14ae7314ba36d01205e8a931979bf2fa /target_explorer/plugins
parent7acd502c496c272f781512fe2779caddbc81fc9f (diff)
downloadorg.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')
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.launch.core/src/org/eclipse/tcf/te/launch/core/delegates/LaunchConfigurationDelegate.java5
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/Launch.java41
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/delegates/LaunchConfigurationDelegate.java13
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.core/src/org/eclipse/tcf/te/tcf/launch/core/steps/AttachDebuggerStep.java37
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.launch.ui/src/org/eclipse/tcf/te/tcf/launch/ui/internal/services/DebugService.java8
-rw-r--r--target_explorer/plugins/org.eclipse.tcf.te.tcf.locator/src/org/eclipse/tcf/te/tcf/locator/steps/StartDebuggerStep.java8
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);

Back to the top