From 6bd526e1b6e609c2b9002e4a711ccd6a7798b680 Mon Sep 17 00:00:00 2001 From: Sean Evoy Date: Mon, 8 Mar 2004 16:42:21 +0000 Subject: [PATCH] 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. --- .../ChangeLog | 10 ++ .../core/AbstractToolReference.java | 103 ++++++++++++++ .../cdt/managedbuilder/core/ITarget.java | 8 ++ .../managedbuilder/core/IToolReference.java | 31 +++++ .../internal/core/OptionCategory.java | 5 +- .../managedbuilder/internal/core/Target.java | 5 +- .../managedbuilder/internal/core/Tool.java | 5 +- .../internal/core/ToolReference.java | 129 ++---------------- 8 files changed, 170 insertions(+), 126 deletions(-) create mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/AbstractToolReference.java create mode 100644 build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolReference.java 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 ITooltool 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. *