From d58486e66db1521318786da70a39d5b6d012483d Mon Sep 17 00:00:00 2001 From: Leo Treggiari Date: Sun, 13 Nov 2005 23:28:42 +0000 Subject: [PATCH] Add getToolBySuperClassId convenience method --- .../managedbuilder/core/IConfiguration.java | 14 +++++++++++ .../cdt/managedbuilder/core/IToolChain.java | 14 +++++++++++ .../internal/core/Configuration.java | 7 ++++++ .../internal/core/ToolChain.java | 23 +++++++++++++++++++ 4 files changed, 58 insertions(+) diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IConfiguration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IConfiguration.java index 453fde57045..598bba51fba 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IConfiguration.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IConfiguration.java @@ -221,6 +221,20 @@ public interface IConfiguration extends IBuildObject { * @return ITool */ public ITool getTool(String id); + + /** + * Returns the ITool in this configuration's tool-chain with + * the specified ID, or a tool with a superclass with this id. + * + *

If the tool-chain does not have a tool with that ID, the method + * returns null. It is the responsibility of the caller to + * verify the return value. + * + * @param id unique identifier of the tool to search for + * @return ITool + * @since 3.0.2 + */ + public ITool getToolBySuperClassId(String id); /** * Returns the IToolChain child of this configuration. diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java index 536caee3a00..70158fc58ab 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/IToolChain.java @@ -161,6 +161,20 @@ public interface IToolChain extends IBuildObject, IHoldsOptions { */ public ITool getTool(String id); + /** + * Returns the ITool in the tool-chain with the specified + * ID, or a tool with a superclass with this id. + * + *

If the tool-chain does not have a tool with that ID, the method + * returns null. It is the responsibility of the caller to + * verify the return value. + * + * @param id unique identifier of the tool to search for + * @return ITool + * @since 3.0.2 + */ + public ITool getToolBySuperClassId(String id); + /** * Returns the IToolChain that is the superclass of this * tool-chain, or null if the attribute was not specified. diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java index 07d2a1cea47..04d73b2555c 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/Configuration.java @@ -660,6 +660,13 @@ public class Configuration extends BuildObject implements IConfiguration { return toolChain.getTool(id); } + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getToolBySuperClassId(java.lang.String) + */ + public ITool getToolBySuperClassId(String id) { + return toolChain.getToolBySuperClassId(id); + } + /* (non-Javadoc) * @see org.eclipse.cdt.managedbuilder.core.IConfiguration#getTargetTool() */ diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java index 0d2442d3c05..5d70a50d1f2 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ToolChain.java @@ -24,6 +24,7 @@ import org.eclipse.cdt.managedbuilder.core.IConfiguration; import org.eclipse.cdt.managedbuilder.core.IManagedConfigElement; import org.eclipse.cdt.managedbuilder.core.IManagedIsToolChainSupported; import org.eclipse.cdt.managedbuilder.core.IManagedProject; +import org.eclipse.cdt.managedbuilder.core.IOption; import org.eclipse.cdt.managedbuilder.core.IOutputType; import org.eclipse.cdt.managedbuilder.core.IProjectType; import org.eclipse.cdt.managedbuilder.core.ITargetPlatform; @@ -820,6 +821,28 @@ public class ToolChain extends HoldsOptions implements IToolChain { Tool tool = (Tool)getToolMap().get(id); return (ITool)tool; } + + /* (non-Javadoc) + * @see org.eclipse.cdt.managedbuilder.core.IToolChain#getToolBySuperClassId(java.lang.String) + */ + public ITool getToolBySuperClassId(String id) { + if (id == null) return null; + + // Look for a tool with this ID, or a tool with a superclass with this id + ITool[] tools = getTools(); + for (int i = 0; i < tools.length; i++) { + ITool targetTool = tools[i]; + ITool tool = targetTool; + do { + if (id.equals(tool.getId())) { + return targetTool; + } + tool = tool.getSuperClass(); + } while (tool != null); + } + + return null; + } /* (non-Javadoc) * Safe accessor for the list of tools.