private static void terminateTarget(DebugTargetImpl target) { try { target.terminate(); } catch (DebugException e) { ChromiumDebugPlugin.log(e); } }
public void launch( ILaunchConfiguration config, String mode, final ILaunch launch, IProgressMonitor monitor) throws CoreException { if (!mode.equals(ILaunchManager.DEBUG_MODE)) { // Chromium JavaScript launch is only supported for debugging. return; } String host = config.getAttribute( LaunchParams.CHROMIUM_DEBUG_HOST, PluginVariablesUtil.getValue(PluginVariablesUtil.DEFAULT_HOST)); int port = config.getAttribute( LaunchParams.CHROMIUM_DEBUG_PORT, PluginVariablesUtil.getValueAsInt(PluginVariablesUtil.DEFAULT_PORT)); if (host == null && port == -1) { throw new RuntimeException("Missing parameters in launch config"); } boolean addNetworkConsole = config.getAttribute(LaunchParams.ADD_NETWORK_CONSOLE, false); SourceWrapSupport sourceWrapSupport = createSourceWrapSupportFromConfig(config); JavascriptVmEmbedder.ConnectionToRemote remoteServer = 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(); } }