package org.eclipse.dltk.internal.launching; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.debug.core.ILaunch; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchManager; import org.eclipse.dltk.core.DLTKLanguageManager; import org.eclipse.dltk.core.IDLTKLanguageToolkit; import org.eclipse.dltk.core.IScriptProject; import org.eclipse.dltk.launching.AbstractScriptLaunchConfigurationDelegate; import org.eclipse.dltk.launching.IInterpreterInstall; import org.eclipse.dltk.launching.IInterpreterRunner; import org.eclipse.dltk.launching.InterpreterConfig; import org.eclipse.dltk.launching.LaunchingMessages; import org.eclipse.dltk.launching.ScriptLaunchConfigurationConstants; import org.eclipse.dltk.launching.debug.DebuggingEngineManager; import org.eclipse.dltk.launching.debug.IDebuggingEngine; import com.ibm.icu.text.MessageFormat; /** * Class used to delegate debug engine discovery before run operation is * executed. * * @author haiodo * */ public class DebugRunnerDelegate implements IInterpreterRunner { private IInterpreterInstall install; public DebugRunnerDelegate(IInterpreterInstall install) { this.install = install; } @Override public void run(InterpreterConfig config, ILaunch launch, IProgressMonitor monitor) throws CoreException { ILaunchConfiguration launchConfiguration = launch .getLaunchConfiguration(); IScriptProject scriptProject = AbstractScriptLaunchConfigurationDelegate .getScriptProject(launchConfiguration); DebuggingEngineManager manager = DebuggingEngineManager.getInstance(); IDLTKLanguageToolkit toolkit = DLTKLanguageManager .getLanguageToolkit(scriptProject); IDebuggingEngine engine = manager.getSelectedDebuggingEngine( scriptProject.getProject(), toolkit.getNatureId()); if (engine != null) { IInterpreterRunner runner = engine.getRunner(install); if (runner != null) { runner.run(config, launch, monitor); } else { throw new CoreException(new Status(IStatus.ERROR, DLTKLaunchingPlugin.PLUGIN_ID, ScriptLaunchConfigurationConstants.ERR_INTERPRETER_RUNNER_DOES_NOT_EXIST, MessageFormat.format( LaunchingMessages.InterpreterRunnerDoesntExist, install.getName(), ILaunchManager.DEBUG_MODE), null)); } } } }