diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FileInfoModification.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FileInfoModification.java index 338f70eed6d..cbdaccd987e 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FileInfoModification.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FileInfoModification.java @@ -14,7 +14,11 @@ import java.util.Collections; import java.util.HashSet; import java.util.Set; +import org.eclipse.cdt.managedbuilder.core.IFileInfo; +import org.eclipse.cdt.managedbuilder.core.IFolderInfo; +import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; +import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.internal.core.ResourceConfiguration; import org.eclipse.cdt.managedbuilder.internal.core.Tool; import org.eclipse.cdt.managedbuilder.tcmodification.IFileInfoModification; @@ -81,4 +85,30 @@ public class FileInfoModification extends return fProject; } + public void restoreDefaults() { +// 3.per-file : change to the tool from the parent folder's tool-chain suitable +// for the given file. NOTE: the custom build step tool should be preserved! + ResourceConfiguration rcInfo = (ResourceConfiguration)getResourceInfo(); + IFolderInfo parentFo = rcInfo.getParentFolderInfo(); + String ext = rcInfo.getPath().getFileExtension(); + if(ext == null) + ext = ""; + + ITool tool = parentFo.getToolFromInputExtension(ext); + ITool realTool = ManagedBuildManager.getRealTool(tool); + boolean add = true; + + ITool[] curTools = getProjectTools(); + for(int i = 0; i < curTools.length; i++){ + ITool cur = curTools[i]; + if(ManagedBuildManager.getRealTool(cur) == realTool){ + add = false; + } else if (!cur.getCustomBuildStep()){ + changeProjectTools(cur, null); + } + } + + if(add) + changeProjectTools(null, tool); + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FolderInfoModification.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FolderInfoModification.java index e3ec3aa74e7..105e8e122c7 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FolderInfoModification.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/tcmodification/FolderInfoModification.java @@ -22,6 +22,10 @@ import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; +import org.eclipse.cdt.managedbuilder.core.BuildException; +import org.eclipse.cdt.managedbuilder.core.IBuilder; +import org.eclipse.cdt.managedbuilder.core.IConfiguration; +import org.eclipse.cdt.managedbuilder.core.IFolderInfo; import org.eclipse.cdt.managedbuilder.core.IManagedProject; import org.eclipse.cdt.managedbuilder.core.IResourceInfo; import org.eclipse.cdt.managedbuilder.core.ITool; @@ -29,8 +33,10 @@ import org.eclipse.cdt.managedbuilder.core.IToolChain; import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager; import org.eclipse.cdt.managedbuilder.internal.core.FolderInfo; import org.eclipse.cdt.managedbuilder.internal.core.IRealBuildObjectAssociation; +import org.eclipse.cdt.managedbuilder.internal.core.ResourceInfo; import org.eclipse.cdt.managedbuilder.internal.core.Tool; import org.eclipse.cdt.managedbuilder.internal.core.ToolChain; +import org.eclipse.cdt.managedbuilder.internal.dataprovider.ConfigurationDataProvider; import org.eclipse.cdt.managedbuilder.internal.tcmodification.ToolChainModificationManager.ConflictMatchSet; import org.eclipse.cdt.managedbuilder.tcmodification.CompatibilityStatus; import org.eclipse.cdt.managedbuilder.tcmodification.IFolderInfoModification; @@ -189,14 +195,18 @@ public class FolderInfoModification extends ToolListModification implements IFol } public void setToolChain(IToolChain tc){ - if(tc == fSelectedToolChain) + setToolChain(tc, false); + } + + public void setToolChain(IToolChain tc, boolean force){ + if(tc == fSelectedToolChain && !force) return; applyToolChain((ToolChain)tc); fSelectedToolChain = (ToolChain)tc; IToolChain newReal = ManagedBuildManager.getRealToolChain(tc); - if(newReal == fRealToolChain) + if(newReal == fRealToolChain && !force) return; fRealToolChain = (ToolChain)newReal; @@ -423,4 +433,41 @@ public class FolderInfoModification extends ToolListModification implements IFol } } } + + private IToolChain getDefaultToolChain(){ + IResourceInfo rcInfo = getResourceInfo(); + IToolChain defaultTc = null; + if (rcInfo.getPath().segmentCount() == 0) { +// 1.Per-project : change to the "default" tool-chain defined in the extension +// super-class of the project configuration. NOTE: the makefile project case might +// need a special handling in this case. + + IConfiguration cfg = rcInfo.getParent(); + IConfiguration extCfg = cfg.getParent(); + defaultTc = extCfg.getToolChain(); + if (defaultTc == null) { + if (cfg.getToolChain() != null) { + defaultTc = cfg.getToolChain().getSuperClass(); + } + } + } else { +// 2.per-folder : change to the same tool-chain as the one used by the parent +// folder. + IFolderInfo parentFo = ((ResourceInfo)rcInfo).getParentFolderInfo(); + IToolChain tc = parentFo.getToolChain(); + defaultTc = ManagedBuildManager.getExtensionToolChain(tc); + } + + if(defaultTc != null && defaultTc.getId().equals(ConfigurationDataProvider.PREF_TC_ID)) + defaultTc = null; + + return defaultTc; + } + + public final void restoreDefaults() { + IToolChain tc = getDefaultToolChain(); + if(tc != null){ + setToolChain(tc, true); + } + } } diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/tcmodification/IToolListModification.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/tcmodification/IToolListModification.java index 15dfcc7d4ef..460d5b33304 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/tcmodification/IToolListModification.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/tcmodification/IToolListModification.java @@ -60,4 +60,6 @@ public interface IToolListModification extends IApplicableModification { * @return */ IToolModification getToolModification(ITool tool); + + void restoreDefaults(); }