From 15a448bf76dd04d753617b74cf67ec29bef73770 Mon Sep 17 00:00:00 2001 From: Mikhail Sennikovsky Date: Tue, 8 May 2007 15:23:31 +0000 Subject: [PATCH] Per-folder settings fixes --- .../internal/core/FolderInfo.java | 48 +++++++++++++++++-- .../makegen/gnu/GnuMakefileGenerator.java | 3 ++ 2 files changed, 48 insertions(+), 3 deletions(-) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/FolderInfo.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/FolderInfo.java index 516604f7d24..7f8a2aa39e9 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/FolderInfo.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/FolderInfo.java @@ -36,6 +36,7 @@ import org.eclipse.cdt.managedbuilder.core.IBuildObjectProperties; import org.eclipse.cdt.managedbuilder.core.IBuildPropertiesRestriction; import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IFolderInfo; +import org.eclipse.cdt.managedbuilder.core.IInputType; import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement; import org.eclipse.cdt.managedbuilder.core.IManagedProject; import org.eclipse.cdt.managedbuilder.core.IModificationStatus; @@ -259,8 +260,46 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo { } } + + private boolean conflictsWithRootTools(ITool tool){ + IFolderInfo rf = getParent().getRootFolderInfo(); + ITool[] rootTools = rf.getFilteredTools(); + ITool tt = getParent().getTargetTool(); + for(int i = 0; i < rootTools.length; i++){ + ITool rootTool = rootTools[i]; + if(rootTool == tt || getMultipleOfType(rootTool) != null){ + if(getConflictingInputExts(rootTool, tool).length != 0) + return true; + } + } + return false; + } + + private IInputType getMultipleOfType(ITool tool){ + IInputType[] types = tool.getInputTypes(); + IInputType mType = null; + boolean foundNonMultiplePrimary = false; + for(int i = 0; i < types.length; i++){ + IInputType type = types[i]; + if(type.getMultipleOfType()){ + if(type.getPrimaryInput() == true){ + foundNonMultiplePrimary = false; + mType = type; + break; + } else if (mType == null){ + mType = type; + } + } else { + if(type.getPrimaryInput() == true){ + foundNonMultiplePrimary = true; + } + } + } + + return foundNonMultiplePrimary ? null : mType; + } - public ITool[] filtereTools(ITool localTools[], IManagedProject manProj) { + public ITool[] filterTools(ITool localTools[], IManagedProject manProj) { // ITool[] localTools = toolChain.getTools(); // IManagedProject manProj = getParent().getManagedProject(); if (manProj == null) { @@ -274,6 +313,9 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo { if(!tool.isEnabled(this)) continue; + if(!isRoot() && conflictsWithRootTools(tool)) + continue; + try { // Make sure the tool is right for the project switch (tool.getNatureFilter()) { @@ -308,7 +350,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo { } ITool[] localTools = toolChain.getTools(); IManagedProject manProj = getParent().getManagedProject(); - return filtereTools(localTools, manProj); + return filterTools(localTools, manProj); // if (manProj == null) { // // If this is not associated with a project, then there is nothing to filter with // return localTools; @@ -1246,7 +1288,7 @@ public class FolderInfo extends ResourceInfo implements IFolderInfo { added = checked[1]; // Map converterMap = calculateConverterTools(removed, added, null, null); ITool newTools[] = calculateToolsArray(removed, added); - ITool[][] conflicting = calculateConflictingTools(filtereTools(newTools, getParent().getManagedProject())); + ITool[][] conflicting = calculateConflictingTools(filterTools(newTools, getParent().getManagedProject())); Map unspecifiedRequiredProps = new HashMap(); Map unspecifiedProps = new HashMap(); Set undefinedSet = new HashSet(); diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java index 44f01b897b6..efbe86cc7b5 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/makegen/gnu/GnuMakefileGenerator.java @@ -2047,6 +2047,9 @@ public class GnuMakefileGenerator implements IManagedBuilderMakefileGenerator2 { ITool buildTools[] = h.buildTools; if(tool == null){ + h = getToolInfo(Path.EMPTY); + buildTools = h.buildTools; + for (int j=0; j