diff --git a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
index ee1f767ea90..10e93913c77 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
+++ b/build/org.eclipse.cdt.managedbuilder.core/ChangeLog
@@ -1,3 +1,13 @@
+2004-03-08 Sean Evoy
+ Committing the changes needed by our partners to better support a variety
+ of tool references. A class hierarchy of tool references has been introduced.
+ The base class is an abstract tool reference. Unqualified tool references,
+ like those used in the manifest or project files will be continue to be
+ treated as tool references. However, we now have some flexibility for the
+ future should a more refined type of tool reference be needed; for example,
+ a dynamic tool that reads a configuration file to determine what environment
+ it is targetting.
+
2004-03-05 Sean Evoy
Fix for bug 53856: "Option reference not reporting built-in includes
paths to scanner"
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/AbstractToolReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/AbstractToolReference.java
new file mode 100644
index 00000000000..d26ee09542e
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/AbstractToolReference.java
@@ -0,0 +1,103 @@
+package org.eclipse.cdt.managedbuilder.core;
+
+/**********************************************************************
+ * Copyright (c) 2004 TimeSys Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * TimeSys Corporation - initial API and implementation
+ **********************************************************************/
+
+public abstract class AbstractToolReference implements IToolReference {
+
+ protected ITool parent;
+
+ public AbstractToolReference() {
+ }
+
+ public AbstractToolReference(ITool parent) {
+ this.parent = parent;
+ }
+
+ public boolean references(ITool target) {
+ if (equals(target)) {
+ // we are the target
+ return true;
+ }
+ else if (parent instanceof IToolReference) {
+ // check the reference we are overriding
+ return ((IToolReference)parent).references(target);
+ }
+ else if (target instanceof IToolReference) {
+ return parent.equals(((IToolReference)target).getTool());
+ }
+ else {
+ // the real reference
+ return parent.equals(target);
+ }
+ }
+
+ public ITool getTool() {
+ return parent;
+ }
+
+ public boolean buildsFileType(String extension) {
+ return parent.buildsFileType(extension);
+ }
+
+ public int getNatureFilter() {
+ return parent.getNatureFilter();
+ }
+
+ public IOption getOption(String id) {
+ return parent.getOption(id);
+ }
+
+ public IOption[] getOptions() {
+ return parent.getOptions();
+ }
+
+ public String getOutputExtension(String inputExtension) {
+ return parent.getOutputExtension(inputExtension);
+ }
+
+ public String getOutputFlag() {
+ return parent.getOutputFlag();
+ }
+
+ public String getOutputPrefix() {
+ return parent.getOutputPrefix();
+ }
+
+ public String getToolCommand() {
+ return parent.getToolCommand();
+ }
+
+ public String getToolFlags() throws BuildException {
+ return parent.getToolFlags();
+ }
+
+ public IOptionCategory getTopOptionCategory() {
+ return parent.getTopOptionCategory();
+ }
+
+ public boolean isHeaderFile(String ext) {
+ return parent.isHeaderFile(ext);
+ }
+
+ public boolean producesFileType(String outputExtension) {
+ return parent.producesFileType(outputExtension);
+ }
+
+ public String getId() {
+ return parent.getId();
+ }
+
+ public String getName() {
+ return parent.getName();
+ }
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java
index d8988c573e2..201dc8ea48a 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ITarget.java
@@ -149,6 +149,14 @@ public interface ITarget extends IBuildObject {
*/
public ITool[] getTools();
+ /**
+ * Answers the tool in the receiver with the ID specified in the argument,
+ * or null
+ *
+ * @param id
+ * @return
+ */
+ public ITool getTool(String id);
/**
* Answers true if the receiver has a make command that differs from its
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolReference.java
new file mode 100644
index 00000000000..8a4fd0bf784
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolReference.java
@@ -0,0 +1,31 @@
+/**********************************************************************
+ * Copyright (c) 2004 TimeSys Corporation and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ *
+ * Contributors:
+ * TimeSys Corporation - initial API and implementation
+ **********************************************************************/
+package org.eclipse.cdt.managedbuilder.core;
+public interface IToolReference extends ITool {
+
+ /**
+ * Answers true
if the reference is a reference to the
+ * tool specified in the argument.
+ *
+ * @param target the tool that should be tested
+ * @return boolean
+ */
+ public boolean references(ITool tool);
+
+ /**
+ * Answers the tool that the reference has been created for.
+ *
+ * @return
+ */
+ public ITool getTool();
+
+}
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 bad79f360cb..87dbf54afde 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
@@ -17,6 +17,7 @@ import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.core.IToolReference;
import org.eclipse.core.runtime.IConfigurationElement;
/**
@@ -95,8 +96,8 @@ public class OptionCategory extends BuildObject implements IOptionCategory {
// TODO don't like this much
ITool[] tools = configuration.getTools();
for (int i = 0; i < tools.length; ++i) {
- if (tools[i] instanceof ToolReference) {
- if (((ToolReference)tools[i]).references(tool)) {
+ if (tools[i] instanceof IToolReference) {
+ if (((IToolReference)tools[i]).references(tool)) {
tool = tools[i];
break;
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
index 0a598e209e3..6c8586df81b 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Target.java
@@ -475,9 +475,8 @@ public class Target extends BuildObject implements ITarget {
|| (makeArguments != null && !makeArguments.equals(parent.getMakeArguments())));
}
- /**
- * @param id
- * @return ITool
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.managedbuilder.core.ITarget#getTool(java.lang.String)
*/
public ITool getTool(String id) {
ITool result = null;
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
index 8c626f11e85..9cd6b35f589 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Tool.java
@@ -22,6 +22,7 @@ import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IOption;
import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
import org.eclipse.cdt.managedbuilder.core.ITool;
+import org.eclipse.cdt.managedbuilder.core.IToolReference;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.core.runtime.IConfigurationElement;
@@ -267,8 +268,8 @@ public class Tool extends BuildObject implements ITool, IOptionCategory {
// TODO don't like this much
ITool[] tools = configuration.getTools();
for (int i = 0; i < tools.length; ++i) {
- if (tools[i] instanceof ToolReference) {
- if (((ToolReference)tools[i]).references(tool)) {
+ if (tools[i] instanceof IToolReference) {
+ if (((IToolReference)tools[i]).references(tool)) {
tool = tools[i];
break;
}
diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
index 19ffaa69c3d..18ae67a6131 100644
--- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
+++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolReference.java
@@ -14,11 +14,11 @@ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import org.eclipse.cdt.managedbuilder.core.AbstractToolReference;
import org.eclipse.cdt.managedbuilder.core.BuildException;
import org.eclipse.cdt.managedbuilder.core.IBuildObject;
import org.eclipse.cdt.managedbuilder.core.IConfiguration;
import org.eclipse.cdt.managedbuilder.core.IOption;
-import org.eclipse.cdt.managedbuilder.core.IOptionCategory;
import org.eclipse.cdt.managedbuilder.core.ITool;
import org.eclipse.core.runtime.IConfigurationElement;
import org.w3c.dom.Document;
@@ -26,11 +26,10 @@ import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
-public class ToolReference implements ITool {
+public class ToolReference extends AbstractToolReference {
private String command;
private List optionReferences;
private IBuildObject owner;
- private ITool parent;
/**
* Create a new tool reference based on information contained in
@@ -44,11 +43,15 @@ public class ToolReference implements ITool {
this.owner = owner;
if (owner instanceof Configuration) {
- Target parentTarget = (Target) ((Configuration)owner).getTarget();
- parent = ((Target)parentTarget.getParent()).getTool(element.getAttribute(ID));
+ if (parent == null) {
+ Target parentTarget = (Target) ((Configuration)owner).getTarget();
+ parent = ((Target)parentTarget.getParent()).getTool(element.getAttribute(ID));
+ }
((Configuration)owner).addToolReference(this);
} else if (owner instanceof Target) {
- parent = ((Target)((Target)owner).getParent()).getTool(element.getAttribute(ID));
+ if (parent == null) {
+ parent = ((Target)((Target)owner).getParent()).getTool(element.getAttribute(ID));
+ }
((Target)owner).addToolReference(this);
}
@@ -99,8 +102,8 @@ public class ToolReference implements ITool {
* @param parent The ITool
tool the reference will be based on.
*/
public ToolReference(BuildObject owner, ITool parent) {
+ super(parent);
this.owner = owner;
- this.parent = parent;
if (owner instanceof Configuration) {
((Configuration)owner).addToolReference(this);
@@ -118,14 +121,6 @@ public class ToolReference implements ITool {
getOptionReferenceList().add(optionRef);
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.ITool#handlesFileType(java.lang.String)
- */
- public boolean buildsFileType(String extension) {
- // The tool reference does not override this value
- return parent.buildsFileType(extension);
- }
-
/**
* Answers a reference to the option. If the reference does not exist,
* a new reference is created.
@@ -142,15 +137,6 @@ public class ToolReference implements ITool {
return ref;
}
- /**
- * Answers the tool the receiver is a reference to.
- *
- * @return
- */
- public ITool getTool() {
- return parent;
- }
-
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.ITool#getToolCommand()
*/
@@ -240,58 +226,11 @@ public class ToolReference implements ITool {
return options;
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.ITool#getOutputFlag()
- */
- public String getOutputFlag() {
- // The tool reference does not override this value
- return parent.getOutputFlag();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.ITool#getOutputPrefix()
- */
- public String getOutputPrefix() {
- // The tool reference does not override this value
- return parent.getOutputPrefix();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.ITool#getTopOptionCategory()
- */
- public IOptionCategory getTopOptionCategory() {
- return parent.getTopOptionCategory();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.managedbuilder.core.ITool#isHeaderFile(java.lang.String)
- */
- public boolean isHeaderFile(String ext) {
- // The tool reference does not override this value
- return parent.isHeaderFile(ext);
- }
-
protected List getAllOptionRefs() {
// First get all the option references this tool reference contains
return ((Configuration)owner).getOptionReferences(parent);
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.IBuildObject#getId()
- */
- public String getId() {
- // The tool reference does not override this value
- return parent.getId();
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.IBuildObject#getName()
- */
- public String getName() {
- // The tool reference does not override this value
- return parent.getName();
- }
-
/* (non-javadoc)
* Answers an option reference that overrides the option, or null
*
@@ -318,13 +257,6 @@ public class ToolReference implements ITool {
return optionReferences;
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.managedbuilder.core.ITool#getNatureFilter()
- */
- public int getNatureFilter() {
- // The tool reference does not override this value
- return parent.getNatureFilter();
- }
/* (non-Javadoc)
* @see org.eclipse.cdt.core.build.managed.ITool#getOption(java.lang.String)
@@ -334,14 +266,6 @@ public class ToolReference implements ITool {
return null;
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.ITool#getOutput(java.lang.String)
- */
- public String getOutputExtension(String inputExtension) {
- // The tool reference does not override this value
- return parent.getOutputExtension(inputExtension);
- }
-
/**
* Answers true
if the owner of the receiver matches
* the argument.
@@ -356,39 +280,6 @@ public class ToolReference implements ITool {
return false;
}
- /* (non-Javadoc)
- * @see org.eclipse.cdt.core.build.managed.ITool#producesFileType(java.lang.String)
- */
- public boolean producesFileType(String outputExtension) {
- // The tool reference does not override this value
- return parent.producesFileType(outputExtension);
- }
-
- /**
- * Answers true
if the reference is a reference to the
- * tool specified in the argument.
- *
- * @param target the tool that should be tested
- * @return boolean
- */
- public boolean references(ITool target) {
- if (equals(target)) {
- // we are the target
- return true;
- }
- else if (parent instanceof ToolReference) {
- // check the reference we are overriding
- return ((ToolReference)parent).references(target);
- }
- else if (target instanceof ToolReference) {
- return parent.equals(((ToolReference)target).parent);
- }
- else {
- // the real reference
- return parent.equals(target);
- }
- }
-
/**
* Persist receiver to project file.
*