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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]