diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java index 56f30fc2a16..cad2eeaac93 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IOptionCategory.java @@ -41,8 +41,28 @@ public interface IOptionCategory extends IBuildObject { * * @param tool * @return Object[][] + * + * @since 3.1 + */ + public Object[][] getOptions(IConfiguration configuration, IHoldsOptions optHolder); + /** + * @deprecated since 3.1 - use getOption with IHoldsOptions aregument instead */ public Object[][] getOptions(IConfiguration configuration); + + /** + * Returns an array of ITool/IOption pairs for the options in this category + * for a given resource configuration. + * + * @param tool + * @return Object[][] + * + * @since 3.1 + */ + public Object[][] getOptions(IResourceConfiguration resConfig, IHoldsOptions optHolder); + /** + * @deprecated since 3.1 - use getOption with IHoldsOptions aregument instead + */ public Object[][] getOptions(IResourceConfiguration resConfig); /** diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java index 31bb20b17f3..68e1d7e89cc 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/OptionCategory.java @@ -35,6 +35,7 @@ import org.w3c.dom.Element; */ public class OptionCategory extends BuildObject implements IOptionCategory { + private static final String EMPTY_STRING = new String(); private static final IOptionCategory[] emtpyCategories = new IOptionCategory[0]; // Parent and children @@ -227,7 +228,16 @@ public class OptionCategory extends BuildObject implements IOptionCategory { } /* (non-Javadoc) - * @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions(org.eclipse.cdt.core.build.managed.ITool) + * @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions() + */ + public Object[][] getOptions(IConfiguration configuration, IHoldsOptions optionHolder) { + IHoldsOptions[] optionHolders = new IHoldsOptions[1]; + optionHolders[0] = optionHolder; + return getOptions(optionHolders, FILTER_PROJECT); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions() */ public Object[][] getOptions(IConfiguration configuration) { IHoldsOptions[] optionHolders = null; @@ -247,6 +257,18 @@ public class OptionCategory extends BuildObject implements IOptionCategory { return getOptions(optionHolders, FILTER_PROJECT); } + /* (non-Javadoc) + * @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions() + */ + public Object[][] getOptions(IResourceConfiguration resConfig, IHoldsOptions optionHolder) { + IHoldsOptions[] optionHolders = new IHoldsOptions[1]; + optionHolders[0] = optionHolder; + return getOptions(optionHolders, FILTER_FILE); + } + + /* (non-Javadoc) + * @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions() + */ public Object[][] getOptions(IResourceConfiguration resConfig) { IHoldsOptions[] optionHolders = null; if (resConfig != null) { @@ -455,4 +477,57 @@ public class OptionCategory extends BuildObject implements IOptionCategory { // Do nothing } + /** + * Creates a name that uniquely identifies a category. The match name is + * a concatenation of the tool and categories, e.g. Tool->Cat1->Cat2 + * maps onto the string "Tool|Cat1|Cat2|" + * + * @param category or tool for which to build the match name + * @return match name + */ + static public String makeMatchName(IBuildObject catOrTool) { + String catName = EMPTY_STRING; + + // Build the match name. + do { + catName = catOrTool.getName() + "|" + catName; //$NON-NLS-1$ + if (catOrTool instanceof ITool) break; + else if (catOrTool instanceof IOptionCategory) { + catOrTool = ((IOptionCategory)catOrTool).getOwner(); + } else + break; + } while (catOrTool != null); + + return catName; + } + + /** + * Finds an option category from an array of categories by comparing against + * a match name. The match name is a concatenation of the tool and categories, + * e.g. Tool->Cat1->Cat2 maps onto the string "Tool|Cat1|Cat2|" + * + * @param matchName an identifier to search + * @param categories as returned by getChildCategories(), i.e. non-flattened + * @return category or tool, if found and null otherwise + */ + static public Object findOptionCategoryByMatchName(String matchName, IOptionCategory[] cats) { + Object primary = null; + + for (int j=0; j