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;
}