Author: peterreilly
Date: Fri Aug 10 15:26:22 2007
New Revision: 564787
URL: http://svn.apache.org/viewvc?view=rev&rev=564787
Log:
adding componentdef code
Added:
ant/core/trunk/src/main/org/apache/tools/ant/antlib.xml
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Componentdef.java
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/AntTypeDefinition.java
ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java
ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Definer.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/defaults.properties
Modified: ant/core/trunk/src/main/org/apache/tools/ant/AntTypeDefinition.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/AntTypeDefinition.java?view=diff&rev=564787&r1=564786&r2=564787
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/AntTypeDefinition.java
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/AntTypeDefinition.java Fri Aug
10 15:26:22 2007
@@ -38,6 +38,23 @@
private Class adaptToClass;
private String className;
private ClassLoader classLoader;
+ private boolean restrict = false;
+
+ /**
+ * Set the restrict attribute.
+ * @param restrict the value to set.
+ */
+ public void setRestrict(boolean restrict) {
+ this.restrict = restrict;
+ }
+
+ /**
+ * Get the restrict attribute.
+ * @return the restrict attribute.
+ */
+ public boolean isRestrict() {
+ return restrict;
+ }
/**
* Set the definition's name.
@@ -129,7 +146,7 @@
* class and the definition class is not
* assignable from the assignable class.
* @param project the current project.
- * @return the exposed class.
+ * @return the exposed class - may return null if upable to load the class
*/
public Class getExposedClass(Project project) {
if (adaptToClass != null) {
@@ -327,6 +344,7 @@
return (other != null && other.getClass() == getClass()
&& other.getTypeClass(project).equals(getTypeClass(project))
&& other.getExposedClass(project).equals(getExposedClass(project))
+ && other.restrict == restrict
&& other.adapterClass == adapterClass
&& other.adaptToClass == adaptToClass);
}
@@ -349,7 +367,8 @@
|| !extractClassname(adapterClass).equals(
extractClassname(other.adapterClass))
|| !extractClassname(adaptToClass).equals(
- extractClassname(other.adaptToClass))) {
+ extractClassname(other.adaptToClass))
+ || restrict != other.restrict) {
return false;
}
// all the names are the same: check if the class path of the loader
Modified: ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java?view=diff&rev=564787&r1=564786&r2=564787
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/ComponentHelper.java Fri Aug
10 15:26:22 2007
@@ -33,6 +33,8 @@
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
import org.apache.tools.ant.taskdefs.Typedef;
import org.apache.tools.ant.taskdefs.Definer;
@@ -56,6 +58,9 @@
* @since Ant1.6
*/
public class ComponentHelper {
+ /** Map of component name to lists of restricted definitions */
+ private Map restrictedDefinitions = new HashMap();
+
/** Map from component name to anttypedefinition */
private AntTypeTable antTypeTable;
@@ -123,6 +128,14 @@
// {tasks, types}
private static Properties[] defaultDefinitions = new Properties[2];
+ /**
+ * Get the project.
+ * @return the project owner of this helper.
+ */
+ public Project getProject() {
+ return project;
+ }
+
/**
* Find a project component for a specific project, creating
* it if it does not exist.
@@ -196,6 +209,14 @@
for (Iterator i = helper.checkedNamespaces.iterator(); i.hasNext();) {
checkedNamespaces.add(i.next());
}
+
+ // Add the restricted definitions
+ for (Iterator i = helper.restrictedDefinitions.entrySet().iterator();
+ i.hasNext();) {
+ Map.Entry entry = (Map.Entry) i.next();
+ restrictedDefinitions.put(
+ entry.getKey(), new ArrayList((List) entry.getValue()));
+ }
}
/**
@@ -396,6 +417,15 @@
}
/**
+ * This returns a list of restricted definitions for a name.
+ * @param componentName the name to use.
+ * @return the list of restricted definitions for a particular name.
+ */
+ public List getRestrictedDefinitions(String componentName) {
+ return (List) restrictedDefinitions.get(componentName);
+ }
+
+ /**
* Adds a new datatype definition.
* Attempting to override an existing definition with an
* equivalent one (i.e. with the same classname) results in
@@ -423,7 +453,11 @@
* @param def an <code>AntTypeDefinition</code> value.
*/
public void addDataTypeDefinition(AntTypeDefinition def) {
- updateDataTypeDefinition(def);
+ if (!def.isRestrict()) {
+ updateDataTypeDefinition(def);
+ } else {
+ updateRestrictedDefinition(def);
+ }
}
/**
@@ -605,6 +639,31 @@
boolean sameValidity = (defValid == validDefinition(old));
//must have same validity; then if they are valid they must also be
the same:
return sameValidity && (!defValid || def.sameDefinition(old, project));
+ }
+
+ /**
+ * update the restricted definition table with a new or
+ * modified definition.
+ */
+ private void updateRestrictedDefinition(AntTypeDefinition def) {
+ String name = def.getName();
+ synchronized (restrictedDefinitions) {
+ List list = (List) restrictedDefinitions.get(name);
+ if (list == null) {
+ list = new ArrayList();
+ restrictedDefinitions.put(name, list);
+ }
+ // Check if the classname is already present and remove it
+ // if it is
+ for (Iterator i = list.iterator(); i.hasNext();) {
+ AntTypeDefinition current = (AntTypeDefinition) i.next();
+ if (current.getClassName().equals(def.getClassName())) {
+ i.remove();
+ break;
+ }
+ }
+ list.add(def);
+ }
}
/**
Modified: ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java?view=diff&rev=564787&r1=564786&r2=564787
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java Fri
Aug 10 15:26:22 2007
@@ -1383,28 +1383,33 @@
}
ComponentHelper helper = ComponentHelper.getComponentHelper(project);
- Object addedObject = null;
- Method addMethod = null;
- Class clazz = helper.getComponentClass(elementName);
- if (clazz == null) {
- return null;
- }
- addMethod = findMatchingMethod(clazz, addTypeMethods);
- if (addMethod == null) {
+ MethodAndObject restricted = createRestricted(
+ helper, elementName, addTypeMethods);
+ MethodAndObject topLevel = createTopLevel(
+ helper, elementName, addTypeMethods);
+
+ if (restricted == null && topLevel == null) {
return null;
}
- addedObject = helper.createComponent(elementName);
- if (addedObject == null) {
- return null;
+
+ if (restricted != null && topLevel != null) {
+ throw new BuildException(
+ "ambiguous: type and component definitions for "
+ + elementName);
}
- Object rObject = addedObject;
- if (addedObject instanceof PreSetDef.PreSetDefinition) {
- rObject = ((PreSetDef.PreSetDefinition)
addedObject).createObject(project);
+
+ MethodAndObject methodAndObject
+ = restricted != null ? restricted : topLevel;
+
+ Object rObject = methodAndObject.object;
+ if (methodAndObject.object instanceof PreSetDef.PreSetDefinition) {
+ rObject = ((PreSetDef.PreSetDefinition) methodAndObject.object)
+ .createObject(project);
}
- final Object nestedObject = addedObject;
+ final Object nestedObject = methodAndObject.object;
final Object realObject = rObject;
-
- return new NestedCreator(addMethod) {
+
+ return new NestedCreator(methodAndObject.method) {
Object create(Project project, Object parent, Object ignore)
throws InvocationTargetException, IllegalAccessException {
if (!getMethod().getName().endsWith("Configured")) {
@@ -1460,6 +1465,9 @@
* @return a matching <code>Method</code>; null if none found.
*/
private Method findMatchingMethod(Class paramClass, List methods) {
+ if (paramClass == null) {
+ return null;
+ }
Class matchedClass = null;
Method matchedMethod = null;
@@ -1486,4 +1494,91 @@
int ends = (MAX_REPORT_NESTED_TEXT - ELLIPSIS.length()) / 2;
return new StringBuffer(text).replace(ends, text.length() - ends,
ELLIPSIS).toString();
}
+
+
+ private class MethodAndObject {
+ private Method method;
+ private Object object;
+ public MethodAndObject(Method method, Object object) {
+ this.method = method;
+ this.object = object;
+ }
+ }
+
+ /**
+ *
+ */
+ private AntTypeDefinition findRestrictedDefinition(
+ ComponentHelper helper, String componentName, List methods) {
+ AntTypeDefinition definition = null;
+ Class matchedDefinitionClass = null;
+
+ List definitions = helper.getRestrictedDefinitions(componentName);
+ if (definitions == null) {
+ return null;
+ }
+ for (int i = 0; i < definitions.size(); ++i) {
+ AntTypeDefinition d = (AntTypeDefinition) definitions.get(i);
+ Class exposedClass = d.getExposedClass(helper.getProject());
+ if (exposedClass == null) {
+ continue;
+ }
+ Method method = findMatchingMethod(exposedClass, methods);
+ if (method == null) {
+ continue;
+ }
+ if (matchedDefinitionClass != null) {
+ throw new BuildException(
+ "ambiguous: restricted definitions for "
+ + componentName + " " +
+ matchedDefinitionClass + " and " + exposedClass);
+ }
+ matchedDefinitionClass = exposedClass;
+ definition = d;
+ }
+ return definition;
+ }
+
+ private MethodAndObject createRestricted(
+ ComponentHelper helper, String elementName, List addTypeMethods) {
+
+ Project project = helper.getProject();
+
+ AntTypeDefinition restrictedDefinition =
+ findRestrictedDefinition(helper, elementName, addTypeMethods);
+
+ if (restrictedDefinition == null) {
+ return null;
+ }
+
+ Method addMethod = findMatchingMethod(
+ restrictedDefinition.getExposedClass(project), addTypeMethods);
+ if (addMethod == null) {
+ throw new BuildException(
+ "Ant Internal Error - contract mismatch for "
+ + elementName);
+ }
+ Object addedObject = restrictedDefinition.create(project);
+ if (addedObject == null) {
+ throw new BuildException(
+ "Failed to create object " + elementName
+ + " of type " + restrictedDefinition.getTypeClass(project));
+ }
+ return new MethodAndObject(addMethod, addedObject);
+ }
+
+ private MethodAndObject createTopLevel(
+ ComponentHelper helper, String elementName, List methods) {
+ Class clazz = helper.getComponentClass(elementName);
+ if (clazz == null) {
+ return null;
+ }
+ Method addMethod = findMatchingMethod(clazz, addTypeMethods);
+ if (addMethod == null) {
+ return null;
+ }
+ Object addedObject = helper.createComponent(elementName);
+ return new MethodAndObject(addMethod, addedObject);
+ }
+
}
Added: ant/core/trunk/src/main/org/apache/tools/ant/antlib.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/antlib.xml?view=auto&rev=564787
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/antlib.xml (added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/antlib.xml Fri Aug 10 15:26:22
2007
@@ -0,0 +1,135 @@
+<?xml version="1.0"?>
+ <!--
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+-->
+<antlib>
+ <!--
+ This is the ant lib definition for ant.
+ Currently it only contains componentdefinitions (restricted
+ types that are not allowed at the top level)
+ - conditions, selectors and comparators
+ (those that are not top-level types (taskdefs or typedefs).
+ defined in defaults.properties of taskdefs and types
+ packages).
+
+ This is currently experimental and it is most
+ likely that these definitions will be placed
+ in a Java Ant definition class.
+ -->
+ <!-- conditions -->
+ <componentdef name="and" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.And"/>
+ <componentdef name="contains" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Contains"/>
+ <componentdef name="equals" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Equals"/>
+ <componentdef name="filesmatch" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.FilesMatch"/>
+ <componentdef name="hasfreespace" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.HasFreeSpace"/>
+ <componentdef name="hasmethod" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.HasMethod"/>
+ <componentdef name="http" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Http"/>
+ <componentdef name="isfailure" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.IsFailure"/>
+ <componentdef name="isfalse" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.IsFalse"/>
+ <componentdef name="isreachable" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.IsReachable"/>
+ <componentdef name="isreference" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.IsReference"/>
+ <componentdef name="isset" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.IsSet"/>
+ <componentdef name="issigned" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.IsSigned"/>
+ <componentdef name="istrue" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.IsTrue"/>
+ <componentdef name="matches" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Matches"/>
+ <componentdef name="not" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Not"/>
+ <componentdef name="or" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Or"/>
+ <componentdef name="os" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Os"/>
+ <componentdef name="parsersupports" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.ParserSupports"/>
+ <componentdef name="resourcecontains" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.ResourceContains"/>
+ <componentdef name="resourcesmatch" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.ResourcesMatch"/>
+ <componentdef name="socket" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Socket"/>
+ <componentdef name="typefound" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.TypeFound"/>
+ <componentdef name="xor" onerror="ignore"
+ classname="org.apache.tools.ant.taskdefs.condition.Xor"/>
+
+ <!-- selectors -->
+ <componentdef name="and" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.And" />
+ <componentdef name="compare" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Compare" />
+ <componentdef name="contains" onerror="ignore"
+ classname="org.apache.tools.ant.types.selectors.ContainsSelector" />
+ <componentdef name="containsregexp" onerror="ignore"
+ classname="org.apache.tools.ant.types.selectors.ContainsRegexpSelector" />
+ <componentdef name="date" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Date" />
+ <componentdef name="exists" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Exists" />
+ <componentdef name="instanceof" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.InstanceOf" />
+ <componentdef name="majority" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Majority" />
+ <componentdef name="modified" onerror="ignore"
+
classname="org.apache.tools.ant.types.selectors.modifiedselector.ModifiedSelector"
/>
+ <componentdef name="name" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Name" />
+ <componentdef name="none" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.None" />
+ <componentdef name="not" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Not" />
+ <componentdef name="or" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Or" />
+ <componentdef name="size" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Size" />
+ <componentdef name="type" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.selectors.Type" />
+
+
+ <!-- comparators -->
+ <componentdef name="name" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.comparators.Name" />
+ <componentdef name="size" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.comparators.Size" />
+ <componentdef name="date" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.comparators.Date" />
+ <componentdef name="exists" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.comparators.Exists" />
+ <componentdef name="type" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.comparators.Type" />
+ <componentdef name="content" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.comparators.Content" />
+ <componentdef name="reverse" onerror="ignore"
+ classname="org.apache.tools.ant.types.resources.comparators.Reverse" />
+
+</antlib>
+
Added: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Componentdef.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Componentdef.java?view=auto&rev=564787
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Componentdef.java
(added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Componentdef.java Fri
Aug 10 15:26:22 2007
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.taskdefs;
+
+import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskAdapter;
+
+/**
+ * Adds a compenent definition to the current project.
+ * used in the current project. Two attributes are needed, the name that
identifies
+ * this compenent uniquely, and the full name of the class (
+ * including the packages) that
+ * implements this component.</p>
+ * @since Ant 1.8
+ * @ant.task category="internal"
+ */
+public class Componentdef extends Definer {
+
+ /**
+ * Default constructor.
+ * Creates a new ComponentDef instance.
+ * Sets the restrict attribute to true.
+ */
+
+ public Componentdef() {
+ setRestrict(true);
+ }
+}
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Definer.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Definer.java?view=diff&rev=564787&r1=564786&r2=564787
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Definer.java
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/Definer.java Fri Aug
10 15:26:22 2007
@@ -66,6 +66,7 @@
private String classname;
private File file;
private String resource;
+ private boolean restrict = false;
private int format = Format.PROPERTIES;
private boolean definerSet = false;
@@ -145,6 +146,16 @@
}
/**
+ * The restrict attribute.
+ * If this is true, only use this definition in add(X).
+ * @param restrict the value to set.
+ */
+ protected void setRestrict(boolean restrict) {
+ this.restrict = restrict;
+ }
+
+
+ /**
* What to do if there is an error in loading the class.
* <dl>
* <li>error - throw build exception</li>
@@ -597,6 +608,7 @@
def.setClass(cl);
def.setAdapterClass(adapterClass);
def.setAdaptToClass(adaptToClass);
+ def.setRestrict(restrict);
def.setClassLoader(al);
if (cl != null) {
def.checkClass(getProject());
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java?view=diff&rev=564787&r1=564786&r2=564787
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/condition/ConditionBase.java
Fri Aug 10 15:26:22 2007
@@ -35,11 +35,7 @@
*
* @since Ant 1.4
*/
-public abstract class ConditionBase extends ProjectComponent
- implements DynamicElement {
-
- private static final String CONDITION_ANTLIB
- = "antlib:org.apache.tools.ant.types.conditions:";
+public abstract class ConditionBase extends ProjectComponent {
/**
* name of the component
@@ -282,25 +278,6 @@
*/
public void add(Condition c) {
conditions.addElement(c);
- }
-
- /**
- * Create a dynamically discovered condition. Built-in conditions can
- * be discovered from the org.apache.tools.ant.taskdefs.condition
- * antlib.
- * @param name the condition to create.
- * @return the dynamic condition if found, null otherwise.
- */
- public Object createDynamicElement(String name) {
- Object cond = ComponentHelper.getComponentHelper(getProject())
- .createComponent(CONDITION_ANTLIB + name);
- if (!(cond instanceof Condition)) {
- return null;
- }
- log("Dynamically discovered '" + name + "' " + cond,
- Project.MSG_DEBUG);
- add((Condition) cond);
- return cond;
}
}
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/defaults.properties
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/defaults.properties?view=diff&rev=564787&r1=564786&r2=564787
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/defaults.properties
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/defaults.properties
Fri Aug 10 15:26:22 2007
@@ -12,6 +12,7 @@
checksum=org.apache.tools.ant.taskdefs.Checksum
chmod=org.apache.tools.ant.taskdefs.Chmod
classloader=org.apache.tools.ant.taskdefs.Classloader
+componentdef=org.apache.tools.ant.taskdefs.Componentdef
concat=org.apache.tools.ant.taskdefs.Concat
condition=org.apache.tools.ant.taskdefs.ConditionTask
copy=org.apache.tools.ant.taskdefs.Copy
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]