package org.nodeclipse.debug.util; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.debug.core.DebugPlugin; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationType; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.debug.ui.DebugUITools; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Display; import org.nodeclipse.ui.Activator; import org.nodeclipse.ui.preferences.PreferenceConstants; import org.nodeclipse.ui.util.NodeclipseConsole; /** * NodeDebugUtil is used to start V8 remote debugger for Node.js and PhantomJS * * @author Tomoyuki Inagaki, Paul Verest */ public class NodeDebugUtil { private static final String CONFIG_NAME = "STANDALONE_V8"; //public static final String LAUNCH_CONFIGURATION_TYPE_ID = "org.chromium.debug.ui.LaunchType$StandaloneV8"; private static final String LAUNCH_CONFIGURATION_TYPE_ID = "org.nodeclipse.debug.launch.LaunchType$StandaloneV8"; public static void launch(final String mode, ILaunch launch, IProgressMonitor monitor, int nodeDebugPort) throws CoreException { ILaunchConfigurationType type = DebugPlugin .getDefault() .getLaunchManager() .getLaunchConfigurationType(LAUNCH_CONFIGURATION_TYPE_ID); if (type == null) return; ILaunchConfigurationWorkingCopy workingCopy = type.newInstance(null, CONFIG_NAME); workingCopy.setAttribute("debug_host", "localhost"); if (nodeDebugPort==0) { //this would only happen if user sets default part value to empty, i.e. 0 IPreferenceStore preferenceStore = Activator.getDefault().getPreferenceStore(); nodeDebugPort = preferenceStore.getInt(PreferenceConstants.NODE_DEBUG_PORT); if (nodeDebugPort==0) nodeDebugPort=5858; }; workingCopy.setAttribute("debug_port", nodeDebugPort); //was 5858); final ILaunchConfiguration config = workingCopy.doSave(); // super.launch(config, mode, launch, monitor); Display.getDefault().asyncExec(new Runnable() { @Override public void run() { DebugUITools.launch(config, mode); } }); } public static void deleteConfig() { ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager(); ILaunchConfigurationType type = manager.getLaunchConfigurationType(LAUNCH_CONFIGURATION_TYPE_ID); try { ILaunchConfiguration[] confs = manager.getLaunchConfigurations(type); for(ILaunchConfiguration conf : confs) { if(CONFIG_NAME.equals(conf.getName())) { conf.delete(); } } } catch (CoreException e) { //e.printStackTrace(); NodeclipseConsole.write(e.getLocalizedMessage()+"\n"); } } public static void deleteProject() { final IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(CONFIG_NAME); if (project.exists()) { try { project.delete(true, null); } catch (CoreException e) { //e.printStackTrace(); NodeclipseConsole.write(e.getLocalizedMessage()+"\n"); } } } }