Date: Sat, 31 May 2003 12:15:01 -0400 (EDT) From: C. Scott Ananian To: Neal M Gafter Cc: jsr14-prototype-comments@sun.com Subject: Broken signature emitted for <Some Enum>.valueOf() In this thread, hhkratz reported problems using the valueOf method for an enumeration class: http://forum.java.sun.com/thread.jsp?forum=316&thread=406073 For a simple enumeration class: enum SomeEnum { A }; javap (actually, SinjP) reports: $ javap SomeEnum Compiled from "SomeEnum.java" class SomeEnum extends java.lang.Enum<SomeEnum> { public static final java.util.List<SomeEnum> VALUES; public static final SomeEnum A; public final java.util.List<SomeEnum> family(); public static java.util.List<SomeEnum> valueOf(java.lang.String); void <init>(); public int compareTo(java.lang.Enum); public int compareTo(java.lang.Object); static void <clinit>(); } Note that the return type of the valueOf method is reported as List<SomeEnum>, rather than the proper SomeEnum. But looking at the bytecode (with FLEX): Codeview "bytecode" for public static java.util.List SomeEnum.valueOf(java.lang.String): #2/SomeEnum.java:1 - getstatic public static final java.util.List SomeEnum.VALUES #3/SomeEnum.java:1 - aload_0 lv_0 #4/SomeEnum.java:1 - invokestatic protected static java.lang.Enum java.lang.Enum.valueOf(java.util.List,java.lang.String) #5/SomeEnum.java:1 - areturn So clearly the returned value is actually an Enum, not a List. Therefore this is a bug in the generated signature (and descriptor; not that the non-GJ-aware FLEX reports the type as 'List') for the valueOf() method. --scott blowfish MI5 AP Columbia mustard Dictionary Chechnya North Korea Ortega Richard Tomlinson Cheney Shoal Bay Seattle COBRA JUDY fissionable ( http://cscott.net/ )