@@ -56,8 +56,6 @@ package org.apache.tools.ant;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.Path;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.types.EnumeratedAttribute;
import org.apache.tools.ant.types.PreferredAttribute;
import org.apache.tools.ant.types.ValidatedFileAttribute;
import java.lang.reflect.Method;
import java.lang.reflect.Method;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.InvocationTargetException;
@@ -73,7 +71,6 @@ import java.util.Locale;
* elements.
* elements.
*
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
* @author <a href="mailto:umagesh@apache.org">Magesh Umasankar</a>
*/
*/
public class IntrospectionHelper implements BuildListener {
public class IntrospectionHelper implements BuildListener {
@@ -168,25 +165,17 @@ public class IntrospectionHelper implements BuildListener {
String propName = getPropertyName(name, "set");
String propName = getPropertyName(name, "set");
if (attributeSetters.get(propName) != null) {
if (attributeSetters.get(propName) != null) {
if (java.lang.String.class.equals(args[0])
if (java.lang.String.class.equals(args[0])) {
/*
/*
Ignore method m, as there is an overloaded
Ignore method m, as there is an overloaded
form of this method that takes in a
form of this method that takes in a
non-string argument, which gains higher
non-string argument, which gains higher
priority.
priority.
*/
|| PreferredAttribute.class.
isAssignableFrom((Class)attributeTypes.get(propName))
/*
Ignore method m because there is an overloaded form of
this method that takes in a PreferredAttribute argument,
which gains higher priority.
*/
) {
*/
continue;
continue;
}
}
/*
/*
If the above conditions are not true , and if there
If the argument is not a String, and if there
is an overloaded form of this method already defined,
is an overloaded form of this method already defined,
we just override that with the new one.
we just override that with the new one.
This mechanism does not guarantee any specific order
This mechanism does not guarantee any specific order
@@ -194,7 +183,7 @@ public class IntrospectionHelper implements BuildListener {
that depends on the order in which "set" methods have
that depends on the order in which "set" methods have
been defined, is not guaranteed to be selected in any
been defined, is not guaranteed to be selected in any
particular order.
particular order.
*/
*/
}
}
AttributeSetter as = createAttributeSetter(m, args[0]);
AttributeSetter as = createAttributeSetter(m, args[0]);
if (as != null) {
if (as != null) {
@@ -600,24 +589,6 @@ public class IntrospectionHelper implements BuildListener {
}
}
};
};
// ValidatedFileAttributes have their own helper class
} else if (ValidatedFileAttribute.class.isAssignableFrom(arg)) {
return new AttributeSetter() {
public void set(Project p, Object parent, String value)
throws InvocationTargetException, IllegalAccessException, BuildException {
try {
ValidatedFileAttribute[] vfa = {
(ValidatedFileAttribute) arg.newInstance()
};
File f = p.resolveFile(value);
vfa[0].setFile(f);
m.invoke(parent, vfa);
} catch (InstantiationException ie) {
throw new BuildException(ie);
}
}
};
// worst case. look for a public String constructor and use it
// worst case. look for a public String constructor and use it
} else {
} else {