summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tromey@redhat.com>2006-03-28 18:51:01 +0000
committerTom Tromey <tromey@redhat.com>2006-03-28 18:51:01 +0000
commitd9d677465f05403d17ad7de6eeb1ed796e548941 (patch)
treec1c2650d158f9b8fad76c541a7b09041d4cf2fcc
parentc10ac06665d6b636f021828d31101ffe6f9df31a (diff)
downloadclasspath-d9d677465f05403d17ad7de6eeb1ed796e548941.tar.gz
PR classpath/25189:
* java/lang/Enum.java (valueOf): Ensure that the named field is an enum constant. (compareTo): Check class of enum.
-rw-r--r--ChangeLog7
-rw-r--r--java/lang/Enum.java8
2 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 1426efbd2..4eae45cf6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2006-03-27 Tom Tromey <tromey@redhat.com>
+ PR classpath/25189:
+ * java/lang/Enum.java (valueOf): Ensure that the named field
+ is an enum constant.
+ (compareTo): Check class of enum.
+
+2006-03-27 Tom Tromey <tromey@redhat.com>
+
* java/lang/reflect/ParameterizedType.java: Javadoc fix.
2006-03-27 Tom Tromey <tromey@redhat.com>
diff --git a/java/lang/Enum.java b/java/lang/Enum.java
index f115090d3..c4160ebaa 100644
--- a/java/lang/Enum.java
+++ b/java/lang/Enum.java
@@ -38,6 +38,7 @@ exception statement from your version. */
package java.lang;
import java.io.Serializable;
+import java.lang.reflect.Field;
/**
* @since 1.5
@@ -76,7 +77,10 @@ public abstract class Enum<T extends Enum<T>>
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 abstract class Enum<T extends Enum<T>>
public final int compareTo(T e)
{
+ if (getDeclaringClass() != e.getDeclaringClass())
+ throw new ClassCastException();
return ordinal - e.ordinal;
}