Index: src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
===================================================================
--- src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java	(revision 10212)
+++ src/main/org/codehaus/groovy/runtime/DefaultGroovyMethods.java	(working copy)
@@ -8656,6 +8656,7 @@
      * <li>Double</li>
      * <li>Float</li>
      * <li>File</li>
+     * <li>Subclasses of Enum (Java 5 and above)</li>
      * </ul>
      * If any other type is given, the call is delegated to
      * {@link #asType(Object,Class)}.
@@ -8679,6 +8680,8 @@
             return toFloat(self);
         } else if (c == File.class) {
             return new File(self);
+        } else if (DefaultTypeTransformation.isEnumSubclass(c)) {
+            return InvokerHelper.invokeMethod(c, "valueOf", new Object[]{ self });
         }
         return asType((Object) self, c);
     }
Index: src/test/groovy/vm5/GroovyMethodsTest.groovy
===================================================================
--- src/test/groovy/vm5/GroovyMethodsTest.groovy	(revision 10212)
+++ src/test/groovy/vm5/GroovyMethodsTest.groovy	(working copy)
@@ -36,6 +36,14 @@
         }
         assert answer == expected
     }
+
+    void testAsEnumType() {
+        assert Suit.HEARTS == ("HEARTS" as Suit)
+
+        shouldFail(IllegalArgumentException) {
+            "FOO" as Suit
+        } 
+    }
 }
 
 enum Suit { HEARTS, CLUBS, SPADES, DIAMONDS }
Index: src/main/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
===================================================================
--- src/main/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java	(revision 10212)
+++ src/main/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java	(working copy)
@@ -465,7 +465,7 @@
      * subclass of java.lang.Enum. Uses class name check to avoid breaking on
      * pre-Java 5 JREs.
      */
-    private static boolean isEnumSubclass(Object value) {
+    public static boolean isEnumSubclass(Object value) {
         if (value instanceof Class) {
             Class superclass = ((Class)value).getSuperclass();
             while (superclass != null) {

