You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by jg...@apache.org on 2006/12/01 18:50:49 UTC
svn commit: r481322 - in /ant/core/trunk: WHATSNEW
src/main/org/apache/tools/ant/IntrospectionHelper.java
src/main/org/apache/tools/ant/taskdefs/AntStructure.java
Author: jglick
Date: Fri Dec 1 09:50:46 2006
New Revision: 481322
URL: http://svn.apache.org/viewvc?view=rev&rev=481322
Log:
#41058: permit Java 5 enumerations to work like EnumeratedAttribute.
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
Modified: ant/core/trunk/WHATSNEW
URL: http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=481322&r1=481321&r2=481322
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Fri Dec 1 09:50:46 2006
@@ -51,6 +51,9 @@
* Do not uppercase the drive letters systematically in FileUtils#normalize.
+* Java 5 enumerations may now be used as values in XML attributes in place of
+ EnumeratedAttribute. Bugzilla 41058.
+
Changes from Ant 1.7.0Beta3 to Ant 1.7.0RC1
===========================================
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=481322&r1=481321&r2=481322
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/IntrospectionHelper.java Fri Dec 1 09:50:46 2006
@@ -1008,6 +1008,25 @@
}
}
};
+ } else if (reflectedArg.getSuperclass() != null && reflectedArg.getSuperclass().getName().equals("java.lang.Enum")) {
+ return new AttributeSetter(m) {
+ public void set(Project p, Object parent, String value)
+ throws InvocationTargetException, IllegalAccessException, BuildException {
+ try {
+ m.invoke(parent, new Object[] {
+ reflectedArg.getMethod("valueOf", new Class[] {String.class}).
+ invoke(null, new Object[] {value})});
+ } catch (InvocationTargetException x) {
+ if (x.getTargetException() instanceof IllegalArgumentException) {
+ throw new BuildException("'" + value + "' is not a permitted value for " + reflectedArg.getName());
+ } else {
+ throw new BuildException(x.getTargetException());
+ }
+ } catch (Exception x) {
+ throw new BuildException(x);
+ }
+ }
+ };
// worst case. look for a public String constructor and use it
// also supports new Whatever(Project, String) as for Path or Reference
// This is used (deliberately) for all primitives/wrappers other than
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/AntStructure.java?view=diff&rev=481322&r1=481321&r2=481322
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/AntStructure.java (original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/AntStructure.java Fri Dec 1 09:50:46 2006
@@ -370,6 +370,24 @@
} catch (IllegalAccessException ie) {
sb.append("CDATA ");
}
+ } else if (type.getSuperclass() != null && type.getSuperclass().getName().equals("java.lang.Enum")) {
+ try {
+ Object[] values = (Object[]) type.getMethod("values", null).invoke(null, null);
+ if (values.length == 0) {
+ sb.append("CDATA ");
+ } else {
+ sb.append('(');
+ for (int i = 0; i < values.length; i++) {
+ if (i != 0) {
+ sb.append(" | ");
+ }
+ sb.append(type.getMethod("name", null).invoke(values[i], null));
+ }
+ sb.append(") ");
+ }
+ } catch (Exception x) {
+ sb.append("CDATA ");
+ }
} else {
sb.append("CDATA ");
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org