/******************************************************************************* * Copyright (c) 2005, 2016 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * *******************************************************************************/ package org.eclipse.dltk.ruby.basicdebugger; import java.io.IOException; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.debug.core.ILaunch; import org.eclipse.dltk.core.PreferencesLookupDelegate; import org.eclipse.dltk.core.environment.IDeployment; import org.eclipse.dltk.core.environment.IEnvironment; import org.eclipse.dltk.core.environment.IExecutionEnvironment; import org.eclipse.dltk.internal.launching.execution.DeploymentManager; import org.eclipse.dltk.launching.DebuggingEngineRunner; import org.eclipse.dltk.launching.IInterpreterInstall; import org.eclipse.dltk.launching.InterpreterConfig; import org.eclipse.dltk.launching.debug.DbgpConnectionConfig; import org.eclipse.dltk.ruby.debug.RubyDebugPlugin; import org.eclipse.dltk.ruby.internal.launching.JRubyInstallType; import org.eclipse.dltk.ruby.launching.RubyLaunchConfigurationConstants; public class RubyBasicDebuggerRunner extends DebuggingEngineRunner { public static final String ENGINE_ID = "org.eclipse.dltk.ruby.basicdebugger"; //$NON-NLS-1$ private static final String RUBY_HOST_VAR = "DBGP_RUBY_HOST"; //$NON-NLS-1$ private static final String RUBY_PORT_VAR = "DBGP_RUBY_PORT"; //$NON-NLS-1$ private static final String RUBY_KEY_VAR = "DBGP_RUBY_KEY"; //$NON-NLS-1$ private static final String RUBY_LOG_VAR = "DBGP_RUBY_LOG"; //$NON-NLS-1$ private static final String DEBUGGER_SCRIPT = "BasicRunner.rb"; //$NON-NLS-1$ protected IPath deploy(IDeployment deployment) throws CoreException { try { IPath deploymentPath = RubyBasicDebuggerPlugin.getDefault() .deployDebuggerSource(deployment); return deployment.getFile(deploymentPath).getPath(); } catch (IOException e) { abort( Messages.RubyBasicDebuggerRunner_unableToDeployDebuggerSource, e); } return null; } public RubyBasicDebuggerRunner(IInterpreterInstall install) { super(install); } @Override protected InterpreterConfig addEngineConfig(InterpreterConfig config, PreferencesLookupDelegate delegate, ILaunch launch) throws CoreException { IEnvironment env = getInstall().getEnvironment(); IExecutionEnvironment exeEnv = env .getAdapter(IExecutionEnvironment.class); IDeployment deployment = exeEnv.createDeployment(); if (deployment == null) { return null; } DeploymentManager.getInstance().addDeployment(launch, deployment); // Get debugger source location final IPath sourceLocation = deploy(deployment); final IPath scriptFile = sourceLocation.append(DEBUGGER_SCRIPT); // Creating new config InterpreterConfig newConfig = (InterpreterConfig) config.clone(); if (getInstall().getInterpreterInstallType() instanceof JRubyInstallType) { newConfig.addEnvVar("JAVA_OPTS", "-Djruby.jit.enabled=false"); //$NON-NLS-1$ //$NON-NLS-2$ //newConfig.addInterpreterArg("-C"); //$NON-NLS-1$ } newConfig.addInterpreterArg("-r"); //$NON-NLS-1$ newConfig.addInterpreterArg(env.convertPathToString(scriptFile)); newConfig.addInterpreterArg("-I"); //$NON-NLS-1$ newConfig.addInterpreterArg(env.convertPathToString(sourceLocation)); // Environment DbgpConnectionConfig dbgpConfig = DbgpConnectionConfig.load(config); newConfig.addEnvVar(RUBY_HOST_VAR, dbgpConfig.getHost()); newConfig.addEnvVar(RUBY_PORT_VAR, Integer.toString(dbgpConfig .getPort())); newConfig.addEnvVar(RUBY_KEY_VAR, dbgpConfig.getSessionId()); String logFileName = getLogFileName(delegate, dbgpConfig.getSessionId()); if (logFileName != null) { newConfig.addEnvVar(RUBY_LOG_VAR, logFileName); } return newConfig; } @Override protected String getDebuggingEngineId() { return ENGINE_ID; } @Override protected String getDebugPreferenceQualifier() { return RubyDebugPlugin.PLUGIN_ID; } @Override protected String getDebuggingEnginePreferenceQualifier() { return RubyBasicDebuggerPlugin.PLUGIN_ID; } protected String getLoggingEnabledPreferenceKey() { return RubyBasicDebuggerConstants.ENABLE_LOGGING; } @Override protected String getLogFileNamePreferenceKey() { return RubyBasicDebuggerConstants.LOG_FILE_NAME; } protected String getLogFilePathPreferenceKey() { return RubyBasicDebuggerConstants.LOG_FILE_PATH; } @Override protected String getProcessType() { return RubyLaunchConfigurationConstants.ID_RUBY_PROCESS_TYPE; } }