Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 22368 invoked from network); 23 Feb 2011 10:20:40 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.3) by minotaur.apache.org with SMTP; 23 Feb 2011 10:20:40 -0000 Received: (qmail 52914 invoked by uid 500); 23 Feb 2011 10:20:40 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 52774 invoked by uid 500); 23 Feb 2011 10:20:37 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 52763 invoked by uid 99); 23 Feb 2011 10:20:37 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 23 Feb 2011 10:20:37 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 23 Feb 2011 10:20:35 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 31CFA2388906; Wed, 23 Feb 2011 10:20:14 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1073673 - /geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java Date: Wed, 23 Feb 2011 10:20:14 -0000 To: scm@geronimo.apache.org From: xuhaihong@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20110223102014.31CFA2388906@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: xuhaihong Date: Wed Feb 23 10:20:13 2011 New Revision: 1073673 URL: http://svn.apache.org/viewvc?rev=1073673&view=rev Log: GERONIMO-4945 Load enum with normal classloader Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java Modified: geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java?rev=1073673&r1=1073672&r2=1073673&view=diff ============================================================================== --- geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java (original) +++ geronimo/server/trunk/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java Wed Feb 23 10:20:13 2011 @@ -100,7 +100,7 @@ public class TemporaryClassLoader extend } // Annotation classes must be loaded by the normal classloader - if (isAnnotationClass(bytes)) { + if (isAnnotationClass(bytes) || isEnum(bytes)) { return super.loadClass(name, resolve); } @@ -141,5 +141,26 @@ public class TemporaryClassLoader extend } } + + /** + * Fast-parse the given class bytecode to determine if it is an + * enum class. + */ + private static boolean isEnum(byte[] bytes) { + IsEnumVisitor isEnumVisitor = new IsEnumVisitor(); + ClassReader classReader = new ClassReader(bytes); + classReader.accept(isEnumVisitor, ClassReader.SKIP_DEBUG); + return isEnumVisitor.isEnum; + } + + public static class IsEnumVisitor extends EmptyVisitor { + + public boolean isEnum = false; + + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + isEnum = (access & Opcodes.ACC_ENUM) != 0; + } + + } }