harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Tim Ellison <t.p.elli...@gmail.com>
Subject Re: [classlib] Enum ready to go
Date Wed, 07 Jun 2006 15:14:42 GMT
So the ECJ folk are going to modify their compiler to dispatch to
Enum#valueOf(Class, String) too [1] -- which means we get to decide the
exception thrown by a null name.

The old Sun-based compilers (like the BEA one referenced below) and
current ECJ will throw an IAE for empty enums and NPE for non-empty
enums, and I don't see that we can influence that code.

If we want the same tests to pass on both old and new compilers we'll
have to allow either exception.

[1] https://bugs.eclipse.org/bugs/show_bug.cgi?id=145746

Regards,
Tim

Mikhail Loenko wrote:
> javac and java are from the same distrib (javac does not print
> detailed version info,
> that is why I''m mentioning java version),
> so it is javac 1.5.0_b64
> 
> so I compile with JDK 1.5.0_b64, run on Harmony and it fails
> 
> Thanks,
> Mikhail
> 
> 2006/6/7, Jimmy, Jing Lv <firepure@gmail.com>:
>> Mikhail Loenko wrote:
>> > 2006/6/7, Tim Ellison <t.p.ellison@gmail.com>:
>> >> 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?
>>
>>
>> >
>> >>
>> >> 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 <t.p.ellison@gmail.com>:
>> >> >> 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 <stepan.mishura@gmail.com>
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 <stepan.mishura@gmail.com
> 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:
>> >> harmony-dev-unsubscribe@incubator.apache.org
>> >> >> >> For additional commands, e-mail:
>> >> harmony-dev-help@incubator.apache.org
>> >> >> >>
>> >> >> >>
>> >> >> >
>> >> >> >
>> >> >>
>> >> >> --
>> >> >>
>> >> >> Tim Ellison (t.p.ellison@gmail.com)
>> >> >> IBM Java technology centre, UK.
>> >> >>
>> >> >>
>> ---------------------------------------------------------------------
>> >> >> Terms of use : http://incubator.apache.org/harmony/mailing.html
>> >> >> To unsubscribe, e-mail:
>> harmony-dev-unsubscribe@incubator.apache.org
>> >> >> For additional commands, e-mail:
>> harmony-dev-help@incubator.apache.org
>> >> >>
>> >> >>
>> >> >
>> >> >
>> ---------------------------------------------------------------------
>> >> > Terms of use : http://incubator.apache.org/harmony/mailing.html
>> >> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> >> > For additional commands, e-mail:
>> harmony-dev-help@incubator.apache.org
>> >> >
>> >> >
>> >>
>> >> --
>> >>
>> >> Tim Ellison (t.p.ellison@gmail.com)
>> >> IBM Java technology centre, UK.
>> >>
>> >> ---------------------------------------------------------------------
>> >> Terms of use : http://incubator.apache.org/harmony/mailing.html
>> >> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> >> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>> >>
>> >>
>> >
>> > ---------------------------------------------------------------------
>> > Terms of use : http://incubator.apache.org/harmony/mailing.html
>> > To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> > For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>> >
>> >
>>
>>
>> -- 
>>
>> Best Regards!
>>
>> Jimmy, Jing Lv
>> China Software Development Lab, IBM
>>
>> ---------------------------------------------------------------------
>> Terms of use : http://incubator.apache.org/harmony/mailing.html
>> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
>> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
>>
>>
> 
> ---------------------------------------------------------------------
> Terms of use : http://incubator.apache.org/harmony/mailing.html
> To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
> For additional commands, e-mail: harmony-dev-help@incubator.apache.org
> 
> 

-- 

Tim Ellison (t.p.ellison@gmail.com)
IBM Java technology centre, UK.

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: harmony-dev-unsubscribe@incubator.apache.org
For additional commands, e-mail: harmony-dev-help@incubator.apache.org


Mime
View raw message