1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-05 08:46:02 +02:00

Get LaunchBar builds off of the UI thread.

This commit is contained in:
Doug Schaefer 2014-09-18 11:55:27 -04:00
parent ae1b12338a
commit ddd0df6db8

View file

@ -15,8 +15,6 @@ import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import org.eclipse.cdt.launchbar.core.ILaunchDescriptor;
import org.eclipse.cdt.launchbar.core.ILaunchTarget;
import org.eclipse.cdt.launchbar.core.internal.LaunchBarManager; import org.eclipse.cdt.launchbar.core.internal.LaunchBarManager;
import org.eclipse.cdt.launchbar.ui.internal.Activator; import org.eclipse.cdt.launchbar.ui.internal.Activator;
import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.AbstractHandler;
@ -32,6 +30,7 @@ import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchDelegate; import org.eclipse.debug.core.ILaunchDelegate;
import org.eclipse.debug.core.ILaunchMode; import org.eclipse.debug.core.ILaunchMode;
@ -61,49 +60,57 @@ public class BuildActiveCommandHandler extends AbstractHandler {
public IStatus runInUIThread(IProgressMonitor monitor) { public IStatus runInUIThread(IProgressMonitor monitor) {
try { try {
LaunchBarManager launchBarManager = Activator.getDefault().getLaunchBarUIManager().getManager(); final LaunchBarManager launchBarManager = Activator.getDefault().getLaunchBarUIManager().getManager();
ILaunchDescriptor desc = launchBarManager.getActiveLaunchDescriptor(); final ILaunchConfiguration config = launchBarManager.getActiveLaunchConfiguration();
ILaunchTarget target = launchBarManager.getActiveLaunchTarget();
ILaunchConfiguration config = launchBarManager.getLaunchConfiguration(desc, target);
Collection<IProject> projects = getProjects(config); final Collection<IProject> projects = getProjects(config);
if (BuildAction.isSaveAllSet()) { if (BuildAction.isSaveAllSet()) {
saveEditors(projects); saveEditors(projects);
} }
if (config == null) { new Job("Building Active Configuration") {
// Default, build the workspace @Override
ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor); protected IStatus run(IProgressMonitor monitor) {
return Status.OK_STATUS; try {
} if (config == null) {
// Default, build the workspace
ILaunchMode launchMode = launchBarManager.getActiveLaunchMode(); ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor);
String mode = launchMode.getIdentifier(); return Status.OK_STATUS;
Set<String> modes = new HashSet<>(); }
modes.add(mode);
ILaunchDelegate delegate = config.getType().getPreferredDelegate(modes); ILaunchMode launchMode = launchBarManager.getActiveLaunchMode();
if (delegate == null) String mode = launchMode.getIdentifier();
delegate = config.getType().getDelegates(modes)[0]; Set<String> modes = new HashSet<>();
ILaunchConfigurationDelegate configDel = delegate.getDelegate(); modes.add(mode);
if (configDel instanceof ILaunchConfigurationDelegate2) { ILaunchDelegate delegate = config.getType().getPreferredDelegate(modes);
ILaunchConfigurationDelegate2 configDel2 = (ILaunchConfigurationDelegate2)configDel; if (delegate == null)
boolean ret; delegate = config.getType().getDelegates(modes)[0];
ret = configDel2.preLaunchCheck(config, mode, monitor); ILaunchConfigurationDelegate configDel = delegate.getDelegate();
if (!ret) if (configDel instanceof ILaunchConfigurationDelegate2) {
return Status.CANCEL_STATUS; ILaunchConfigurationDelegate2 configDel2 = (ILaunchConfigurationDelegate2)configDel;
if (!configDel2.buildForLaunch(config, mode, monitor)) boolean ret;
return Status.OK_STATUS; ret = configDel2.preLaunchCheck(config, mode, monitor);
} if (!ret)
return Status.CANCEL_STATUS;
// Fall through, do a normal build if (!configDel2.buildForLaunch(config, mode, monitor))
if (projects.isEmpty()) { return Status.OK_STATUS;
ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor); }
} else {
Collection<IBuildConfiguration> buildConfigs = getBuildConfigs(projects); // Fall through, do a normal build
ResourcesPlugin.getWorkspace().build(buildConfigs.toArray(new IBuildConfiguration[buildConfigs.size()]), if (projects.isEmpty()) {
IncrementalProjectBuilder.INCREMENTAL_BUILD, true, monitor); ResourcesPlugin.getWorkspace().build(IncrementalProjectBuilder.INCREMENTAL_BUILD, monitor);
// TODO, may need to get the buildReferences argument from the descriptor } else {
} Collection<IBuildConfiguration> buildConfigs = getBuildConfigs(projects);
ResourcesPlugin.getWorkspace().build(buildConfigs.toArray(new IBuildConfiguration[buildConfigs.size()]),
IncrementalProjectBuilder.INCREMENTAL_BUILD, true, monitor);
// TODO, may need to get the buildReferences argument from the descriptor
}
return Status.OK_STATUS;
} catch (CoreException e) {
return e.getStatus();
}
}
}.schedule();
} catch (CoreException e) { } catch (CoreException e) {
return e.getStatus(); return e.getStatus();
} }