[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