package org.erlide.backend.internal;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.debug.core.ILaunch;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.model.IProcess;
import org.erlide.backend.api.BackendData;
import org.erlide.util.ErlLogger;
import org.erlide.util.IProvider;
import org.erlide.util.SystemConfiguration;
class LaunchBeamProcessProvider implements IProvider<IProcess> {
private final BackendData data;
LaunchBeamProcessProvider(final BackendData data) {
this.data = data;
}
@Override
public IProcess get() {
ILaunch launch = data.getLaunch();
if (launch == null) {
launch = launchPeer();
data.setLaunch(launch);
}
return launch.getProcesses().length == 0 ? null : launch.getProcesses()[0];
}
private ILaunch launchPeer() {
final ILaunchConfiguration launchConfig = data.asLaunchConfiguration();
try {
final boolean registerForDebug = data.getLaunch() != null
|| SystemConfiguration.getInstance().isDeveloper();
return launchConfig.launch(ILaunchManager.RUN_MODE, new NullProgressMonitor(),
false, registerForDebug);
} catch (final CoreException e) {
ErlLogger.error(e);
return null;
}
}
}