### Eclipse Workspace Patch 1.0 #P org.eclipse.linuxtools.cdt.autotools.core Index: src/org/eclipse/linuxtools/cdt/autotools/core/AutotoolsNewProjectNature.java =================================================================== --- src/org/eclipse/linuxtools/cdt/autotools/core/AutotoolsNewProjectNature.java (revision 24339) +++ src/org/eclipse/linuxtools/cdt/autotools/core/AutotoolsNewProjectNature.java (working copy) @@ -20,9 +20,16 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IProjectNature; +import org.eclipse.core.resources.IWorkspace; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.ISchedulingRule; +import org.eclipse.core.runtime.jobs.Job; import org.eclipse.linuxtools.internal.cdt.autotools.core.AutotoolsConfigurationBuilder; public class AutotoolsNewProjectNature implements IProjectNature { @@ -94,9 +101,45 @@ commandList.add(command); } } - ICommand[] newCommands = new ICommand[commandList.size()]; - description.setBuildSpec(commandList.toArray(newCommands)); - project.setDescription(description, new NullProgressMonitor()); + final ICommand[] newCommands = commandList.toArray(new ICommand[commandList.size()]); + if (newCommands.length == commands.length) { + boolean hasCorrectBuilderCommands = true; + for (int j = 0; j < commands.length; ++j) { + if (!commands[j].getBuilderName().equals(newCommands[j])) { + hasCorrectBuilderCommands = false; + break; + } + } + if (hasCorrectBuilderCommands) + return; + } + final ISchedulingRule rule = ResourcesPlugin.getWorkspace().getRoot(); + final IProject proj = project; + + Job backgroundJob = new Job("Autotools Set Project Description") { + /* (non-Javadoc) + * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) + */ + protected IStatus run(IProgressMonitor monitor) { + try { + ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { + + public void run(IProgressMonitor monitor) throws CoreException { + + IProjectDescription description = proj.getDescription(); + description.setBuildSpec(newCommands); + proj.setDescription(description, new NullProgressMonitor()); + } + }, rule, IWorkspace.AVOID_UPDATE, monitor); + } catch (CoreException e) { + return e.getStatus(); + } + IStatus returnStatus = Status.OK_STATUS; + return returnStatus; + } + }; + backgroundJob.setRule(rule); + backgroundJob.schedule(); } /**