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]

Reply via email to