1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-06 17:26:01 +02:00

Fix bug 123461 - Deriving from the same tool twice within the same configuration does not work

This commit is contained in:
Leo Treggiari 2006-01-21 02:10:08 +00:00
parent ee778cd7ee
commit 09fc3cd62d
3 changed files with 117 additions and 3 deletions

View file

@ -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);
/**

View file

@ -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<cats.length; j++) {
IBuildObject catOrTool = cats[j];
// Build the match name
String catName = makeMatchName(catOrTool);
// Check whether the name matches
if (catName.equals(matchName)) {
primary = cats[j];
break;
} else if (matchName.startsWith(catName)) {
// If there is a common root then check for any further children
primary = findOptionCategoryByMatchName(matchName, cats[j].getChildCategories());
if (primary != null)
break;
}
}
return primary;
}
}

View file

@ -1077,13 +1077,21 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
}
return iconPathURL;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions()
*/
public Object[][] getOptions(IConfiguration configuration, IHoldsOptions optionHolder) {
if (optionHolder != this) return null;
return getOptions(configuration);
}
/* (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) {
// Find the child of the configuration that represents the same tool.
// It could the tool itself, or a "sub-class" of the tool.
// It could be the tool itself, or a "sub-class" of the tool.
if (configuration != null) {
ITool[] tools = configuration.getTools();
return getOptions(tools);
@ -1092,6 +1100,17 @@ public class Tool extends HoldsOptions implements ITool, IOptionCategory {
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions()
*/
public Object[][] getOptions(IResourceConfiguration resConfig, IHoldsOptions optionHolder) {
if (optionHolder != this) return null;
return getOptions(resConfig);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IOptionCategory#getOptions()
*/
public Object[][] getOptions(IResourceConfiguration resConfig) {
ITool[] tools = resConfig.getTools();
return getOptions(tools);