createConnectionToRemote(host, port, launch, addNetworkConsole);
try {
final String projectNameBase = config.getName();
DestructingGuard destructingGuard = new DestructingGuard();
try {
Destructable lauchDestructor = new Destructable() {
public void destruct() {
if (!launch.hasChildren()) {
DebugPlugin.getDefault().getLaunchManager().removeLaunch(launch);
}
}
};
destructingGuard.addValue(lauchDestructor);
WorkspaceBridge.Factory bridgeFactory =
new VProjectWorkspaceBridge.FactoryImpl(projectNameBase);
final DebugTargetImpl target =
new DebugTargetImpl(launch, bridgeFactory, sourceWrapSupport, getPresetSyncDirection());
Destructable targetDestructor = new Destructable() {
public void destruct() {
terminateTarget(target);
}
};
destructingGuard.addValue(targetDestructor);
launch.addDebugTarget(target);
boolean attached = DebugTargetImpl.attach(target, remoteServer, destructingGuard,
OPENING_VIEW_ATTACH_CALLBACK, monitor);
if (!attached) {
// Cancel pressed.
return;
}
launch.addDebugTarget(target);
monitor.done();
// All OK
destructingGuard.discharge();
} finally {
destructingGuard.doFinally();
}
} finally {
remoteServer.disposeConnection();
}