[jboss-cvs] JBossAS SVN: r105573 - in projects/jboss-reflect/trunk/src: main/java/org/jboss/reflect/plugins/bytecode/bytes and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jun 2 06:51:49 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-06-02 06:51:48 -0400 (Wed, 02 Jun 2010)
New Revision: 105573

Added:
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassInfoEnumWithOtherFields.java
Modified:
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/FieldBytes.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/introspection/IntrospectionTypeInfoFactoryImpl.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ClassInfoEnumTest.java
Log:
[JBREFLECT-126] Only add fields that are enum constants to EnumInfo.constants

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java	2010-06-02 10:37:07 UTC (rev 105572)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/BytecodeTypeInfoFactoryImpl.java	2010-06-02 10:51:48 UTC (rev 105573)
@@ -166,10 +166,11 @@
          List<EnumConstantInfoImpl> constants = new ArrayList<EnumConstantInfoImpl>();
          for (FieldBytes field : fields)
          {
-            if (field.getName().endsWith("$VALUES"))
-               continue;
-            AnnotationValue[] annotations = getAnnotations(field);
-            constants.add(new EnumConstantInfoImpl(field.getName(), enumInfo, annotations));
+            if (field.isEnumConstant())
+            {
+               AnnotationValue[] annotations = getAnnotations(field);
+               constants.add(new EnumConstantInfoImpl(field.getName(), enumInfo, annotations));
+            }
          }
          enumInfo.setEnumConstants(constants.toArray(new EnumConstantInfoImpl[constants.size()]));
          return enumInfo;

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/FieldBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/FieldBytes.java	2010-06-02 10:37:07 UTC (rev 105572)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/FieldBytes.java	2010-06-02 10:51:48 UTC (rev 105573)
@@ -29,4 +29,5 @@
  */
 public interface FieldBytes extends Bytes, MemberBytes
 {
+   boolean isEnumConstant();
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java	2010-06-02 10:37:07 UTC (rev 105572)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/AsmFieldBytes.java	2010-06-02 10:51:48 UTC (rev 105573)
@@ -28,6 +28,7 @@
 import org.jboss.reflect.plugins.bytecode.bytes.FieldBytes;
 import org.jboss.reflect.util.objectweb.asm.AnnotationVisitor;
 import org.jboss.reflect.util.objectweb.asm.FieldVisitor;
+import org.jboss.reflect.util.objectweb.asm.Opcodes;
 
 /**
  * 
@@ -48,6 +49,11 @@
       getClazz().getReader().accept(visitor, AsmClassBytes.STANDARD_FLAGS);
       return visitor.getAnnotations();
    }
+
+   public boolean isEnumConstant()
+   {
+      return (getModifiers() & Opcodes.ACC_ENUM) == Opcodes.ACC_ENUM;
+   }
    
    class LoadFieldAnnotationsVisitor extends  Util.EmptyClassVisitor
    {

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/introspection/IntrospectionTypeInfoFactoryImpl.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/introspection/IntrospectionTypeInfoFactoryImpl.java	2010-06-02 10:37:07 UTC (rev 105572)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/introspection/IntrospectionTypeInfoFactoryImpl.java	2010-06-02 10:51:48 UTC (rev 105573)
@@ -34,7 +34,9 @@
 import java.lang.reflect.WildcardType;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.Map;
 
 import org.jboss.reflect.plugins.AnnotationAttributeImpl;
@@ -479,14 +481,17 @@
          EnumInfoImpl enumInfoImpl = new EnumInfoImpl(clazz.getName(), clazz.getModifiers());
          result = enumInfoImpl;
          Field[] fields = clazz.getFields();
-         EnumConstantInfoImpl[] constants = new EnumConstantInfoImpl[fields.length];
-         int i = 0;
+         
+         List<EnumConstantInfoImpl> constants = new ArrayList<EnumConstantInfoImpl>();
          for (Field field : fields)
          {
-            AnnotationValue[] annotations = getAnnotations(field);
-            constants[i++] = new EnumConstantInfoImpl(field.getName(), enumInfoImpl, annotations);
+            if (field.isEnumConstant())
+            {
+               AnnotationValue[] annotations = getAnnotations(field);
+               constants.add(new EnumConstantInfoImpl(field.getName(), enumInfoImpl, annotations));
+            }
          }
-         enumInfoImpl.setEnumConstants(constants);
+         enumInfoImpl.setEnumConstants(constants.toArray(new EnumConstantInfoImpl[constants.size()]));
       }
       else if (clazz.isAnnotation())
       {

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java	2010-06-02 10:37:07 UTC (rev 105572)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java	2010-06-02 10:51:48 UTC (rev 105573)
@@ -30,6 +30,8 @@
 import java.lang.reflect.WildcardType;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 import javassist.ClassPool;
@@ -38,6 +40,7 @@
 import javassist.CtMember;
 import javassist.CtMethod;
 import javassist.CtPrimitiveType;
+import javassist.Modifier;
 import javassist.NotFoundException;
 import javassist.bytecode.Descriptor;
 import javassist.bytecode.SignatureAttribute;
@@ -195,14 +198,16 @@
          {
             JavassistEnumInfo enumInfo = new JavassistEnumInfo(this, ctClass, clazz);
             CtField[] fields = ctClass.getFields();
-            EnumConstantInfoImpl[] constants = new EnumConstantInfoImpl[fields.length];
-            int i = 0;
+            List<EnumConstantInfoImpl> constants = new ArrayList<EnumConstantInfoImpl>();
             for (CtField field : fields)
             {
-               AnnotationValue[] annotations = getAnnotations(field);
-               constants[i++] = new EnumConstantInfoImpl(field.getName(), enumInfo, annotations);
+               if (Modifier.isEnum(field.getModifiers()))
+               {
+                  AnnotationValue[] annotations = getAnnotations(field);
+                  constants.add(new EnumConstantInfoImpl(field.getName(), enumInfo, annotations));
+               }
             }
-            enumInfo.setEnumConstants(constants);
+            enumInfo.setEnumConstants(constants.toArray(new EnumConstantInfoImpl[constants.size()]));
             return enumInfo;
          }
 

Added: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassInfoEnumWithOtherFields.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassInfoEnumWithOtherFields.java	                        (rev 0)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassInfoEnumWithOtherFields.java	2010-06-02 10:51:48 UTC (rev 105573)
@@ -0,0 +1,39 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.test.classinfo.support;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public enum ClassInfoEnumWithOtherFields
+{
+   ONE, TWO, THREE;
+   
+   public String pubField;
+   
+   public static final String pubStaticField = "x";
+   
+   @SuppressWarnings("unused")
+   private String privField;
+}

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ClassInfoEnumTest.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ClassInfoEnumTest.java	2010-06-02 10:37:07 UTC (rev 105572)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ClassInfoEnumTest.java	2010-06-02 10:51:48 UTC (rev 105573)
@@ -35,6 +35,7 @@
 import org.jboss.test.classinfo.support.ClassInfoEnum;
 import org.jboss.test.classinfo.support.ClassInfoEnumAnnotation;
 import org.jboss.test.classinfo.support.ClassInfoEnumFieldAnnotation;
+import org.jboss.test.classinfo.support.ClassInfoEnumWithOtherFields;
 
 /**
  * ClassInfoEnumTest.
@@ -64,6 +65,11 @@
       testEnum(ClassInfoEnumFieldAnnotation.class);
    }
    
+   public void testEnumWithOtherFields() throws Throwable
+   {
+      testEnum(ClassInfoEnumWithOtherFields.class);
+   }
+   
    @SuppressWarnings("unchecked")
    private void testEnum(Class enumClass) throws Throwable
    {




More information about the jboss-cvs-commits mailing list