Jimmy, Jing Lv wrote: > Mikhail Loenko wrote: >> 2006/6/7, Tim Ellison <[EMAIL PROTECTED]>: >>> The Sun 1.5.0_06 compiler was driven directly by our build scripts (so >>> using jsr14) and the Eclipse 3.2RC4 compiler has source 1.5 target >>> 1.4 set. >>> >>> I could throw an IAE from Enum#valueOf(Class, null) when the Enum is >>> empty, but seems a bit of a drag to work around the compilers. >>> >>> (which version of BEA javac?) >> >> javac -version prints just "1.5.0" >> java -version prints "build 1.5.0-b64" >> > > I would bet the tests shall pass if using javac of java-version "build > 1.5.0_01" or later :) > And as the tests also fail on RI of "build 1.5.0-b64" (I've just find > one:) ), I guess it is a bug of RI, which was fixed in the later version. > > What's more, shall we also suggest that everyone use a latest version of > javac to avoid such problem?
Let me ask the compiler folk what they think first [1], I think we can work with both (modulo the empty enum case in ECJ) if we have to since at least in one case it is delegated straight back to us. [1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=145732 Regards, Tim >>> Mikhail Loenko wrote: >>> > Are you compiling with "jsr14" as our build does? >>> > >>> > I'm using BEA javac with "jsr14" it compiles to something like this: >>> > for(i=0; i < values.length; i++ ) >>> > if( values[i].name().equals(argument) ) >>> > return values[i].name().equals(argument) >>> > throw IAE >>> > >>> > 2006/6/7, Tim Ellison <[EMAIL PROTECTED]>: >>> >> Maybe compiler specific. >>> >> >>> >> Looking at Proxy.Type it appears that the Sun compiler 1.5.0_06 >>> >> delegates to the Enum type: >>> >> >>> >> public static Type valueOf(String name) >>> >> { >>> >> return (Type)Enum.valueOf( >>> >> Proxy.class$java$net$Proxy$Type != null ? >>> >> Proxy.class$java$net$Proxy$Type : >>> >> ( >>> >> Proxy.class$java$net$Proxy$Type = >>> >> Proxy._mthclass$("java.net.Proxy$Type") >>> >> ), >>> >> name); >>> >> } >>> >> >>> >> >>> >> and the Eclipse compiler 3.2RC4 looks up the constant itself: >>> >> >>> >> public static Type valueOf(String s) >>> >> { >>> >> Type atype[]; >>> >> Type type1; >>> >> for(int i = (atype = ENUM$VALUES).length; --i >= 0;) >>> >> if(s.equals((type1 = atype[i]).name())) >>> >> return type1; >>> >> throw new IllegalArgumentException(s); >>> >> } >>> >> >>> >> >>> >> In the Sun compiler a null name argument gets passed to >>> >> Enum#valueOf(Class, String) where I check and throw NPE. >>> >> >>> >> In the Eclipse compiler the line if(s.equals(...)... will cause a NPE >>> >> iff there are entries in the VALUES array (otherwise it doesn't go >>> into >>> >> the for-loop) and throws an IAE without going into my code. >>> >> >>> >> Maybe I can withdraw the null name test while we settle this? >>> > >>> > We now have 3 tests failing >>> > >>> > Thanks, >>> > Mikhail >>> > >>> > >>> > >>> >> >>> >> Regards, >>> >> Tim >>> >> >>> >> >>> >> Andrew Zhang wrote: >>> >> > Hi, Stepan, >>> >> > >>> >> > The test you metioned is passed in my environment: >>> >> > RI version: 1.5.0_02. >>> >> > Linux: Read hat Enterprise Linux AS(2.4.21-15.EL) >>> >> > >>> >> > Is the problem caused by earlier version javac? >>> >> > >>> >> > I remember that RI of earlier verion throws IAE instead of NPE >>> when the >>> >> > arguement is null. >>> >> > >>> >> > Would you please check "java" version? >>> >> > >>> >> > Thanks. >>> >> > >>> >> > >>> >> > >>> >> > >>> >> > >>> >> > On 6/7/06, Stepan Mishura <[EMAIL PROTECTED]> wrote: >>> >> >> >>> >> >> I found the reason - tests expect NPE when valueOf(null) is >>> invoked >>> >> but >>> >> >> IAE >>> >> >> is thrown instead. For example, >>> >> >> >>> >> >> java.lang.IllegalArgumentException >>> >> >> at org.apache.harmony.tests.java.lang.EnumTest$Sample.valueOf( >>> >> >> EnumTest.java >>> >> >> :22) >>> >> >> at >>> >> >> >>> >> >>> org.apache.harmony.tests.java.lang.EnumTest.test_valueOfLjava_lang_String >>> >>> >> >> (EnumTest.java :113) >>> >> >> at >>> >> java.lang.reflect.AccessibleObject.invokeV(AccessibleObject.java:205) >>> >> >> >>> >> >> Thanks, >>> >> >> Stepan. >>> >> >> >>> >> >> On 6/7/06, Andrew Zhang wrote: >>> >> >> > >>> >> >> > Hello Stepan and Mikhail, >>> >> >> > >>> >> >> > All tests passed on my machine. >>> >> >> > >>> >> >> > Which test case was failed in your environment, on RI or >>> Harmony? >>> >> >> > >>> >> >> > Thanks! >>> >> >> > >>> >> >> > >>> >> >> > On 6/7/06, Stepan Mishura <[EMAIL PROTECTED] > wrote: >>> >> >> > > >>> >> >> > > Hi Tim, >>> >> >> > > >>> >> >> > > On 6/7/06, Tim Ellison wrote: >>> >> >> > > > >>> >> >> > > > Heads up that I completed the implementation of j.l.Enum >>> >> today; so >>> >> >> you >>> >> >> > > > can go mad and use enum types in classlib code for real now. >>> >> >> > > >>> >> >> > > >>> >> >> > > Cool! >>> >> >> > > >>> >> >> > > I wrote a bunch of tests but if you could hammer on it and >>> try to >>> >> >> break >>> >> >> > > > it that would be good :-) >>> >> >> > > >>> >> >> > > >>> >> >> > > And did you run it? :-) It fails for me :-( >>> >> >> > > >>> >> >> > > Thanks, >>> >> >> > > Stepan. >>> >> >> > > >>> >> >> > > If you take a look at the implementation [1] of valueOf(Class, >>> >> >> String) >>> >> >> > > > it uses reflection to get the enum constant values. I'm not >>> >> sure >>> >> >> how >>> >> >> > > > 'popular' the valueOf() method is, but since the values >>> don't >>> >> >> change >>> >> >> > > > they are a good candidate for being cached if it proves >>> to be >>> >> >> called >>> >> >> > > > frequently. I'm happy to do that if people think it is >>> >> worthwhile. >>> >> >> > > > >>> >> >> > > > Regards, >>> >> >> > > > Tim >>> >> >> > > > >>> >> >> > > > >>> >> >> > > > [1] >>> >> >> > > > >>> >> >> > > > >>> >> >> > > >>> >> >> > >>> >> >> >>> >> >>> http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/lang/Enum.java?revision=412166&view=markup >>> >>> >> >>> >> >> >>> >> >> > > > >>> >> >> > >>> >> >> > >>> >> >> > >>> >> >> >>> >> >> >>> >> >> ------------------------------------------------------ >>> >> >> Terms of use : http://incubator.apache.org/harmony/mailing.html >>> >> >> To unsubscribe, e-mail: >>> [EMAIL PROTECTED] >>> >> >> For additional commands, e-mail: >>> [EMAIL PROTECTED] >>> >> >> >>> >> >> >>> >> > >>> >> > >>> >> >>> >> -- >>> >> >>> >> Tim Ellison ([EMAIL PROTECTED]) >>> >> IBM Java technology centre, UK. >>> >> >>> >> --------------------------------------------------------------------- >>> >> Terms of use : http://incubator.apache.org/harmony/mailing.html >>> >> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> >> For additional commands, e-mail: >>> [EMAIL PROTECTED] >>> >> >>> >> >>> > >>> > --------------------------------------------------------------------- >>> > Terms of use : http://incubator.apache.org/harmony/mailing.html >>> > To unsubscribe, e-mail: [EMAIL PROTECTED] >>> > For additional commands, e-mail: [EMAIL PROTECTED] >>> > >>> > >>> >>> -- >>> >>> Tim Ellison ([EMAIL PROTECTED]) >>> IBM Java technology centre, UK. >>> >>> --------------------------------------------------------------------- >>> Terms of use : http://incubator.apache.org/harmony/mailing.html >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >> >> --------------------------------------------------------------------- >> Terms of use : http://incubator.apache.org/harmony/mailing.html >> To unsubscribe, e-mail: [EMAIL PROTECTED] >> For additional commands, e-mail: [EMAIL PROTECTED] >> >> > > -- Tim Ellison ([EMAIL PROTECTED]) IBM Java technology centre, UK. --------------------------------------------------------------------- Terms of use : http://incubator.apache.org/harmony/mailing.html To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]