1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-05 00:36:16 +02:00

Bug 322794 Allow IBuilder to have IOptions.

This commit is contained in:
Doug Schaefer 2010-08-18 14:21:22 +00:00
parent 92009d5090
commit ef4aeacd8a
3 changed files with 85 additions and 138 deletions

View file

@ -1484,6 +1484,9 @@ Additional special types exist to flag options of special relevance to the build
</documentation>
</annotation>
<complexType>
<sequence>
<element ref="option" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="id" type="string" use="required">
<annotation>
<documentation>

View file

@ -32,7 +32,7 @@ import org.eclipse.core.runtime.IConfigurationElement;
* @noextend This class is not intended to be subclassed by clients.
* @noimplement This interface is not intended to be implemented by clients.
*/
public interface IBuilder extends IBuildObject, IMakeBuilderInfo {
public interface IBuilder extends IHoldsOptions, IMakeBuilderInfo {
public static final String ARGUMENTS = "arguments"; //$NON-NLS-1$
public static final String BUILDER_ELEMENT_NAME = "builder"; //$NON-NLS-1$
public static final String BUILDFILEGEN_ID ="buildfileGenerator"; //$NON-NLS-1$

View file

@ -37,6 +37,7 @@ import org.eclipse.cdt.core.settings.model.ICStorageElement;
import org.eclipse.cdt.core.settings.model.extension.CBuildData;
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.core.settings.model.util.LanguageSettingEntriesSerializer;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.ExternalBuildRunner;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IBuildRunner;
@ -45,6 +46,7 @@ import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement;
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.InternalBuildRunner;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
@ -73,12 +75,11 @@ import org.eclipse.core.variables.IStringVariableManager;
import org.eclipse.core.variables.VariablesPlugin;
import org.osgi.framework.Version;
public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider, IRealBuildObjectAssociation {
public class Builder extends HoldsOptions implements IBuilder, IMatchKeyProvider, IRealBuildObjectAssociation {
private static final String EMPTY_STRING = ""; //$NON-NLS-1$
// Superclass
private IBuilder superClass;
private String superClassId;
// Parent and children
private IToolChain parent;
@ -159,6 +160,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* @param managedBuildRevision The fileVersion of Managed Buid System
*/
public Builder(IToolChain parent, IManagedConfigElement element, String managedBuildRevision) {
super(true);
this.parent = parent;
isExtensionBuilder = true;
@ -185,6 +187,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* @param isExtensionElement Indicates whether this is an extension element or a managed project element
*/
public Builder(ToolChain parent, IBuilder superClass, String Id, String name, boolean isExtensionElement) {
super(true);
this.parent = parent;
this.superClass = superClass;
setManagedBuildRevision(parent.getManagedBuildRevision());
@ -214,6 +217,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* @param managedBuildRevision The fileVersion of Managed Buid System
*/
public Builder(IToolChain parent, ICStorageElement element, String managedBuildRevision) {
super(true);
this.parent = parent;
isExtensionBuilder = false;
@ -233,6 +237,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* @param builder The existing builder to clone.
*/
public Builder(IToolChain parent, String Id, String name, Builder builder) {
super(true);
this.parent = parent;
superClass = builder.superClass;
@ -433,7 +438,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* E L E M E N T A T T R I B U T E R E A D E R S A N D W R I T E R S
*/
/* (non-Javadoc)
/**
* Loads the builder information from the ManagedConfigElement specified in the
* argument.
*
@ -565,19 +570,23 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
IManagedConfigElement[] children = element.getChildren();
for(int i = 0; i < children.length; i++){
IManagedConfigElement child = children[i];
String name = child.getName();
if(OUTPUT_ENTRIES.equals(name)){
ICSettingEntry entries[] = LanguageSettingEntriesSerializer.loadEntries(new ManagedConfigStorageElement(child));
if(entries.length == 0){
outputEntries = new ICOutputEntry[0];
} else {
List list = new ArrayList(entries.length);
for(int k = 0; k < entries.length; k++){
if(entries[k].getKind() == ICLanguageSettingEntry.OUTPUT_PATH)
list.add(entries[k]);
if (loadChild(child)) {
// nothing
} else {
String name = child.getName();
if(OUTPUT_ENTRIES.equals(name)){
ICSettingEntry entries[] = LanguageSettingEntriesSerializer.loadEntries(new ManagedConfigStorageElement(child));
if(entries.length == 0){
outputEntries = new ICOutputEntry[0];
} else {
List list = new ArrayList(entries.length);
for(int k = 0; k < entries.length; k++){
if(entries[k].getKind() == ICLanguageSettingEntry.OUTPUT_PATH)
list.add(entries[k]);
}
outputEntries = (ICOutputEntry[])list.toArray(new ICOutputEntry[list.size()]);
}
outputEntries = (ICOutputEntry[])list.toArray(new ICOutputEntry[list.size()]);
}
}
}
}
@ -591,7 +600,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
fBuildRunnerElement = ((DefaultManagedConfigElement)element).getConfigurationElement();
}
/* (non-Javadoc)
/**
* Initialize the builder information from the XML element
* specified in the argument
*
@ -742,19 +751,23 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
ICStorageElement[] children = element.getChildren();
for(int i = 0; i < children.length; i++){
ICStorageElement child = children[i];
String name = child.getName();
if(OUTPUT_ENTRIES.equals(name)){
ICSettingEntry entries[] = LanguageSettingEntriesSerializer.loadEntries(child);
if(entries.length == 0){
outputEntries = new ICOutputEntry[0];
} else {
List list = new ArrayList(entries.length);
for(int k = 0; k < entries.length; k++){
if(entries[k].getKind() == ICLanguageSettingEntry.OUTPUT_PATH)
list.add(entries[k]);
if (loadChild(child)) {
// nothing
} else {
String name = child.getName();
if(OUTPUT_ENTRIES.equals(name)){
ICSettingEntry entries[] = LanguageSettingEntriesSerializer.loadEntries(child);
if(entries.length == 0){
outputEntries = new ICOutputEntry[0];
} else {
List list = new ArrayList(entries.length);
for(int k = 0; k < entries.length; k++){
if(entries[k].getKind() == ICLanguageSettingEntry.OUTPUT_PATH)
list.add(entries[k]);
}
outputEntries = (ICOutputEntry[])list.toArray(new ICOutputEntry[list.size()]);
}
outputEntries = (ICOutputEntry[])list.toArray(new ICOutputEntry[list.size()]);
}
}
}
}
@ -852,6 +865,13 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
// TODO: issue warning?
}
// options
try {
super.serialize(element);
} catch (BuildException e) {
ManagedBuilderCorePlugin.log(e);
}
if(outputEntries != null){
ICStorageElement outEl = element.createChild(OUTPUT_ENTRIES);
LanguageSettingEntriesSerializer.serializeEntries(outputEntries, outEl);
@ -938,6 +958,13 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
// TODO: issue warning?
}
// options
try {
super.serialize(element);
} catch (BuildException e) {
ManagedBuilderCorePlugin.log(e);
}
if(outputEntries != null){
ICStorageElement outEl = element.createChild(OUTPUT_ENTRIES);
LanguageSettingEntriesSerializer.serializeEntries(outputEntries, outEl);
@ -948,9 +975,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* P A R E N T A N D C H I L D H A N D L I N G
*/
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder#getParent()
*/
public IToolChain getParent() {
return parent;
}
@ -959,24 +983,15 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* M O D E L A T T R I B U T E A C C E S S O R S
*/
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getSuperClass()
*/
public IBuilder getSuperClass() {
return superClass;
return (IBuilder)superClass;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder#getName()
*/
@Override
public String getName() {
return (name == null && superClass != null) ? superClass.getName() : name;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder#isAbstract()
*/
public boolean isAbstract() {
if (isAbstract != null) {
return isAbstract.booleanValue();
@ -985,9 +1000,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder#getUnusedChildren()
*/
public String getUnusedChildren() {
if (unusedChildren != null) {
return unusedChildren;
@ -995,14 +1007,11 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return EMPTY_STRING; // Note: no inheritance from superClass
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder#getCommand()
*/
public String getCommand() {
if (command == null) {
// If I have a superClass, ask it
if (superClass != null) {
return superClass.getCommand();
return getSuperClass().getCommand();
} else {
return "make"; //$NON-NLS-1$
}
@ -1010,9 +1019,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return command;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder#getArguments()
*/
public String getArguments() {
String args = getArgumentsAttribute();
String stopOnErrCmd = getStopOnErrCmd(isStopOnError());
@ -1159,23 +1165,17 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return args;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getErrorParserIds()
*/
public String getErrorParserIds() {
String ids = errorParserIds;
if (ids == null) {
// If I have a superClass, ask it
if (superClass != null) {
ids = superClass.getErrorParserIds();
ids = getSuperClass().getErrorParserIds();
}
}
return ids;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getErrorParserList()
*/
public String[] getErrorParserList() {
String parserIDs = getErrorParserIds();
String[] errorParsers = null;
@ -1198,9 +1198,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return errorParsers;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder.setCommand(String)
*/
public void setCommand(String cmd) {
if(getCommand().equals(cmd)) return;
if (cmd == null && command == null) return;
@ -1210,9 +1207,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.IBuilder#setArguments(String)
*/
public void setArguments(String newArgs) {
if(getArguments().equals(newArgs))
return;
@ -1235,9 +1229,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#setErrorParserIds()
*/
public void setErrorParserIds(String ids) {
String currentIds = getErrorParserIds();
if (ids == null && currentIds == null) return;
@ -1247,17 +1238,11 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
/* (non-Javadoc)
* Sets the isAbstract attribute
*/
public void setIsAbstract(boolean b) {
isAbstract = new Boolean(b);
setDirty(true);
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getBuildFileGeneratorElement()
*/
public IConfigurationElement getBuildFileGeneratorElement() {
if (buildFileGeneratorElement == null) {
if (superClass != null) {
@ -1267,9 +1252,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return buildFileGeneratorElement;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getBuildFileGenerator()
*/
public IManagedBuilderMakefileGenerator getBuildFileGenerator(){
IConfigurationElement element = getBuildFileGeneratorElement();
if (element != null) {
@ -1292,9 +1274,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#setBuildFileGeneratorElement(String)
*/
public void setBuildFileGeneratorElement(IConfigurationElement element) {
buildFileGeneratorElement = element;
setDirty(true);
@ -1304,32 +1283,20 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
* O B J E C T S T A T E M A I N T E N A N C E
*/
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#isExtensionElement()
*/
public boolean isExtensionElement() {
return isExtensionBuilder;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#isDirty()
*/
public boolean isDirty() {
// This shouldn't be called for an extension Builder
if (isExtensionBuilder) return false;
return isDirty;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#setDirty(boolean)
*/
public void setDirty(boolean isDirty) {
this.isDirty = isDirty;
}
/* (non-Javadoc)
* Resolve the element IDs to interface references
*/
public void resolveReferences() {
if (!resolved) {
resolved = true;
@ -1348,14 +1315,11 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getConvertToId()
*/
public String getConvertToId() {
if (convertToId == null) {
// If I have a superClass, ask it
if (superClass != null) {
return superClass.getConvertToId();
return getSuperClass().getConvertToId();
} else {
return EMPTY_STRING;
}
@ -1363,9 +1327,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return convertToId;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#setConvertToId(String)
*/
public void setConvertToId(String convertToId) {
if (convertToId == null && this.convertToId == null) return;
if (convertToId == null || this.convertToId == null || !convertToId.equals(this.convertToId)) {
@ -1375,14 +1336,11 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getVersionsSupported()
*/
public String getVersionsSupported() {
if (versionsSupported == null) {
// If I have a superClass, ask it
if (superClass != null) {
return superClass.getVersionsSupported();
return getSuperClass().getVersionsSupported();
} else {
return EMPTY_STRING;
}
@ -1390,10 +1348,6 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return versionsSupported;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#setVersionsSupported(String)
*/
public void setVersionsSupported(String versionsSupported) {
if (versionsSupported == null && this.versionsSupported == null) return;
if (versionsSupported == null || this.versionsSupported == null || !versionsSupported.equals(this.versionsSupported)) {
@ -1403,48 +1357,33 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getFileContextBuildMacroValues()
*/
public IFileContextBuildMacroValues getFileContextBuildMacroValues(){
if(fileContextBuildMacroValues == null && superClass != null)
return superClass.getFileContextBuildMacroValues();
return getSuperClass().getFileContextBuildMacroValues();
return fileContextBuildMacroValues;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getBuilderVariablePattern()
*/
public String getBuilderVariablePattern(){
if(builderVariablePattern == null && superClass != null)
return superClass.getBuilderVariablePattern();
return getSuperClass().getBuilderVariablePattern();
return builderVariablePattern;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#isVariableCaseSensitive()
*/
public boolean isVariableCaseSensitive(){
if(isVariableCaseSensitive == null){
if(superClass != null)
return superClass.isVariableCaseSensitive();
return getSuperClass().isVariableCaseSensitive();
return true;
}
return isVariableCaseSensitive.booleanValue();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getReservedMacroNames()
*/
public String[] getReservedMacroNames(){
if(reservedMacroNames == null && superClass != null)
return superClass.getReservedMacroNames();
return getSuperClass().getReservedMacroNames();
return reservedMacroNames;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.managedbuilder.core.IBuilder#getReservedMacroNameSupplier()
*/
public IReservedMacroNameSupplier getReservedMacroNameSupplier(){
if(reservedMacroNameSupplier == null && reservedMacroNameSupplierElement != null){
try{
@ -1453,7 +1392,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
if(reservedMacroNameSupplier == null && superClass != null)
return superClass.getReservedMacroNameSupplier();
return getSuperClass().getReservedMacroNameSupplier();
return reservedMacroNameSupplier;
}
@ -1844,7 +1783,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean isStopOnError() {
if(stopOnErr == null){
if(superClass != null){
return superClass.isStopOnError();
return getSuperClass().isStopOnError();
}
return true;
}
@ -1984,7 +1923,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean isAutoBuildEnable() {
if(autoBuildEnabled == null){
if(superClass != null)
return superClass.isAutoBuildEnable();
return getSuperClass().isAutoBuildEnable();
return false;
}
return autoBuildEnabled.booleanValue();
@ -1993,7 +1932,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean isCleanBuildEnabled() {
if(cleanBuildEnabled == null){
if(superClass != null)
return superClass.isCleanBuildEnabled();
return getSuperClass().isCleanBuildEnabled();
return true;
}
return cleanBuildEnabled.booleanValue();
@ -2006,7 +1945,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean isIncrementalBuildEnabled() {
if(incrementalBuildEnabled == null){
if(superClass != null)
return superClass.isIncrementalBuildEnabled();
return getSuperClass().isIncrementalBuildEnabled();
return true;
}
return incrementalBuildEnabled.booleanValue();
@ -2047,7 +1986,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean appendEnvironment() {
if(appendEnvironment == null){
if(superClass != null){
return superClass.appendEnvironment();
return getSuperClass().appendEnvironment();
}
return true;
}
@ -2339,7 +2278,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean keepEnvironmentVariablesInBuildfile() {
if(keepEnvVarInBuildfile == null){
if(superClass != null)
return superClass.keepEnvironmentVariablesInBuildfile();
return getSuperClass().keepEnvironmentVariablesInBuildfile();
return false;
}
return keepEnvVarInBuildfile.booleanValue();
@ -2363,7 +2302,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean supportsBuild(boolean managed) {
if(supportsManagedBuild == null){
if(superClass != null)
return superClass.supportsBuild(managed);
return getSuperClass().supportsBuild(managed);
return managed || !isInternalBuilder();
}
return supportsManagedBuild.booleanValue();
@ -2551,7 +2490,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
public boolean isParallelBuildOn() {
if(parallelBuildOn == null){
if(superClass != null){
return superClass.isParallelBuildOn();
return getSuperClass().isParallelBuildOn();
}
return false;
}
@ -2749,7 +2688,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
}
}
if(fCommandLauncher == null && superClass != null)
return superClass.getCommandLauncher();
return getSuperClass().getCommandLauncher();
else if(fCommandLauncher == null) // catch all for backwards compatibility
fCommandLauncher = new CommandLauncher();
@ -2770,7 +2709,7 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
// Check with superClass
if (superClass != null)
return superClass.getBuildRunner();
return getSuperClass().getBuildRunner();
// Default internal or external builder
if (isInternalBuilder())
@ -2778,5 +2717,10 @@ public class Builder extends BuildObject implements IBuilder, IMatchKeyProvider,
return new ExternalBuildRunner();
}
@Override
protected IResourceInfo getParentResourceInfo() {
// There are no resources associated with builders
return null;
}
}