I'm checking this in on the generics branch.

This fixes PR 25189.

Tom

2006-03-27  Tom Tromey  <[EMAIL PROTECTED]>

        PR classpath/25189:
        * java/lang/Enum.java (valueOf): Ensure that the named field
        is an enum constant.
        (compareTo): Check class of enum.

Index: java/lang/Enum.java
===================================================================
RCS file: /cvsroot/classpath/classpath/java/lang/Attic/Enum.java,v
retrieving revision 1.1.2.7
diff -u -r1.1.2.7 Enum.java
--- java/lang/Enum.java 28 Sep 2005 17:50:20 -0000      1.1.2.7
+++ java/lang/Enum.java 28 Mar 2006 18:45:42 -0000
@@ -38,6 +38,7 @@
 package java.lang;
 
 import java.io.Serializable;
+import java.lang.reflect.Field;
 
 /**
  * @since 1.5
@@ -76,7 +77,10 @@
 
     try
       {
-       return (S) etype.getDeclaredField(s).get(null);
+        Field f = etype.getDeclaredField(s);
+        if (! f.isEnumConstant())
+          throw new IllegalArgumentException(s);
+        return (S) f.get(null);
       }
     catch (NoSuchFieldException exception)
       {
@@ -106,6 +110,8 @@
 
   public final int compareTo(T e)
   {
+    if (getDeclaringClass() != e.getDeclaringClass())
+      throw new ClassCastException();
     return ordinal - e.ordinal;
   }
 

Reply via email to