+++ /dev/null
-/*\r
- * \r
- * Copyright 2001-2004 The Ant-Contrib project\r
- *\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- *\r
- * http://www.apache.org/licenses/LICENSE-2.0\r
- *\r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- */\r
-package net.sf.antcontrib.cpptasks.types;\r
-import java.util.Vector;\r
-\r
-import net.sf.antcontrib.cpptasks.CUtil;\r
-\r
-import org.apache.tools.ant.BuildException;\r
-/**\r
- * Preprocessor macro undefinition.\r
- * \r
- * @author Mark A Russell <a\r
- * href="mailto:mark_russell@csgsystems.com">mark_russell@csg_systems.com\r
- * </a>\r
- */\r
-public class UndefineArgument {\r
- /**\r
- * This method returns an array of UndefineArgument and DefineArgument's by\r
- * merging a base list with an override list.\r
- * \r
- * Any define in the base list with a name that appears in the override\r
- * list is suppressed. All entries in the override list are preserved\r
- * \r
- */\r
- public static UndefineArgument[] merge(UndefineArgument[] base,\r
- UndefineArgument[] override) {\r
- if (base.length == 0) {\r
- UndefineArgument[] overrideClone = (UndefineArgument[]) override\r
- .clone();\r
- return overrideClone;\r
- }\r
- if (override.length == 0) {\r
- UndefineArgument[] baseClone = (UndefineArgument[]) base.clone();\r
- return baseClone;\r
- }\r
- Vector unduplicated = new Vector(base.length);\r
- for (int i = 0; i < base.length; i++) {\r
- UndefineArgument current = base[i];\r
- String currentName = current.getName();\r
- boolean match = false;\r
- if (currentName == null) {\r
- match = true;\r
- } else {\r
- for (int j = 0; j < override.length; j++) {\r
- UndefineArgument over = override[j];\r
- String overName = over.getName();\r
- if (overName != null && overName.equals(currentName)) {\r
- match = true;\r
- break;\r
- }\r
- }\r
- }\r
- if (!match) {\r
- unduplicated.addElement(current);\r
- }\r
- }\r
- UndefineArgument[] combined = new UndefineArgument[unduplicated.size()\r
- + override.length];\r
- unduplicated.copyInto(combined);\r
- int offset = unduplicated.size();\r
- for (int i = 0; i < override.length; i++) {\r
- combined[offset + i] = override[i];\r
- }\r
- return combined;\r
- }\r
- private boolean define = false;\r
- private String ifCond;\r
- private String name;\r
- private String unlessCond;\r
- public UndefineArgument() {\r
- }\r
- protected UndefineArgument(boolean isDefine) {\r
- this.define = isDefine;\r
- }\r
- public void execute() throws org.apache.tools.ant.BuildException {\r
- throw new org.apache.tools.ant.BuildException(\r
- "Not an actual task, but looks like one for documentation purposes");\r
- }\r
- /** Returns the name of the define */\r
- public final String getName() {\r
- return name;\r
- }\r
- /** Returns the value of the define */\r
- public String getValue() {\r
- return null;\r
- }\r
- /**\r
- * Returns true if the define's if and unless conditions (if any) are\r
- * satisfied.\r
- * \r
- * @exception BuildException\r
- * throws build exception if name is not set\r
- */\r
- public final boolean isActive(org.apache.tools.ant.Project p)\r
- throws BuildException {\r
- if (name == null) {\r
- throw new BuildException("<define> is missing name attribute");\r
- }\r
- return CUtil.isActive(p, ifCond, unlessCond);\r
- }\r
- /** Returns true if this is a define, false if an undefine. */\r
- public final boolean isDefine() {\r
- return define;\r
- }\r
- /**\r
- * Sets the property name for the 'if' condition.\r
- * \r
- * The define will be ignored unless the property is defined.\r
- * \r
- * The value of the property is insignificant, but values that would imply\r
- * misinterpretation ("false", "no") will throw an exception when\r
- * evaluated.\r
- * \r
- * @param propName\r
- * property name\r
- */\r
- public final void setIf(String propName) {\r
- ifCond = propName;\r
- }\r
- /** Set the name attribute */\r
- public final void setName(String name) {\r
- this.name = name;\r
- }\r
- /**\r
- * Set the property name for the 'unless' condition.\r
- * \r
- * If named property is set, the define will be ignored.\r
- * \r
- * The value of the property is insignificant, but values that would imply\r
- * misinterpretation ("false", "no") of the behavior will throw an\r
- * exception when evaluated.\r
- * \r
- * @param propName\r
- * name of property\r
- */\r
- public final void setUnless(String propName) {\r
- unlessCond = propName;\r
- }\r
-}\r