[jboss-cvs] JBossAS SVN: r105575 - in projects/jboss-reflect/trunk/src: main/java/org/jboss/reflect/plugins/bytecode/bytes/asm and 2 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Jun 2 07:37:34 EDT 2010
Author: kabir.khan at jboss.com
Date: 2010-06-02 07:37:33 -0400 (Wed, 02 Jun 2010)
New Revision: 105575
Added:
projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassWithAnnotationWithPrimitiveClass.java
Modified:
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/BytecodePrimitive.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java
projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AnnotatedClassInfoTest.java
Log:
[JBREFLECT-125] Support primitive class values for annotation attributes
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/BytecodePrimitive.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/BytecodePrimitive.java 2010-06-02 11:31:05 UTC (rev 105574)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/BytecodePrimitive.java 2010-06-02 11:37:33 UTC (rev 105575)
@@ -33,23 +33,23 @@
*/
public class BytecodePrimitive
{
- public static final BytecodePrimitive BOOLEAN = new BytecodePrimitive("boolean", "Z", Boolean.class.getName(), "booleanValue");
+ public static final BytecodePrimitive BOOLEAN = new BytecodePrimitive("boolean", "Z", Boolean.class, Boolean.TYPE, "booleanValue");
- public static final BytecodePrimitive CHAR = new BytecodePrimitive("char", "C", Character.class.getName(), "charValue");
+ public static final BytecodePrimitive CHAR = new BytecodePrimitive("char", "C", Character.class, Character.TYPE, "charValue");
- public static final BytecodePrimitive BYTE = new BytecodePrimitive("byte", "B", Byte.class.getName(), "byteValue");
+ public static final BytecodePrimitive BYTE = new BytecodePrimitive("byte", "B", Byte.class, Byte.TYPE, "byteValue");
- public static final BytecodePrimitive SHORT = new BytecodePrimitive("short", "S", Short.class.getName(), "shortValue");
+ public static final BytecodePrimitive SHORT = new BytecodePrimitive("short", "S", Short.class, Short.TYPE, "shortValue");
- public static final BytecodePrimitive INT = new BytecodePrimitive("int", "I", Integer.class.getName(), "intValue");
+ public static final BytecodePrimitive INT = new BytecodePrimitive("int", "I", Integer.class, Integer.TYPE, "intValue");
- public static final BytecodePrimitive LONG = new BytecodePrimitive("long", "J", Long.class.getName(), "longValue");
+ public static final BytecodePrimitive LONG = new BytecodePrimitive("long", "J", Long.class, Long.TYPE, "longValue");
- public static final BytecodePrimitive FLOAT = new BytecodePrimitive("float", "F", Float.class.getName(), "floatValue");
+ public static final BytecodePrimitive FLOAT = new BytecodePrimitive("float", "F", Float.class, Float.TYPE, "floatValue");
- public static final BytecodePrimitive DOUBLE = new BytecodePrimitive("double", "D", Double.class.getName(), "doubleValue");
+ public static final BytecodePrimitive DOUBLE = new BytecodePrimitive("double", "D", Double.class, Double.TYPE, "doubleValue");
- public static final BytecodePrimitive VOID = new BytecodePrimitive("void", "V", Void.class.getName(), null);
+ public static final BytecodePrimitive VOID = new BytecodePrimitive("void", "V", Void.class, Void.TYPE, null);
static final Map<String, BytecodePrimitive> primitives;
static
@@ -78,17 +78,23 @@
final String name;
+ final Class<?> wrapperClass;
+
+ final Class<?> primitiveClass;
+
final String arrayComponentName;
final String wrapperClassName;
final String valueMethodName;
- private BytecodePrimitive(String name, String arrayComponentName, String wrapperClassName, String valueMethodName)
+ private BytecodePrimitive(String name, String arrayComponentName, Class<?> wrapperClass, Class<?> primitiveClass, String valueMethodName)
{
this.name = name;
this.arrayComponentName = arrayComponentName;
- this.wrapperClassName = wrapperClassName;
+ this.wrapperClass = wrapperClass;
+ this.primitiveClass = primitiveClass;
+ this.wrapperClassName = wrapperClass.getName();
this.valueMethodName = valueMethodName;
}
@@ -116,4 +122,14 @@
{
return valueMethodName;
}
+
+ public Class<?> getWrapperClass()
+ {
+ return wrapperClass;
+ }
+
+ public Class<?> getPrimitiveClass()
+ {
+ return primitiveClass;
+ }
}
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java 2010-06-02 11:31:05 UTC (rev 105574)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/bytecode/bytes/asm/Util.java 2010-06-02 11:37:33 UTC (rev 105575)
@@ -28,6 +28,7 @@
import java.util.List;
import java.util.Map;
+import org.jboss.reflect.plugins.bytecode.bytes.BytecodePrimitive;
import org.jboss.reflect.plugins.bytecode.bytes.ClassBytes;
import org.jboss.reflect.util.objectweb.asm.AnnotationVisitor;
import org.jboss.reflect.util.objectweb.asm.Attribute;
@@ -64,6 +65,10 @@
{
try
{
+ BytecodePrimitive primitive = BytecodePrimitive.valueOf(desc);
+ if (primitive != null)
+ return primitive.getPrimitiveClass();
+
return SecurityActions.loadClass(loader, toClassName(desc).replace('/', '.'));
}
catch (ClassNotFoundException e)
Added: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassWithAnnotationWithPrimitiveClass.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassWithAnnotationWithPrimitiveClass.java (rev 0)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/support/ClassWithAnnotationWithPrimitiveClass.java 2010-06-02 11:37:33 UTC (rev 105575)
@@ -0,0 +1,33 @@
+/*
+* 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 $
+ */
+ at AnnotationWithClass(clazz=void.class)
+public class ClassWithAnnotationWithPrimitiveClass
+{
+
+}
Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AnnotatedClassInfoTest.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AnnotatedClassInfoTest.java 2010-06-02 11:31:05 UTC (rev 105574)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AnnotatedClassInfoTest.java 2010-06-02 11:37:33 UTC (rev 105575)
@@ -54,6 +54,7 @@
import org.jboss.test.classinfo.support.ClassWithAnnotationWithClass;
import org.jboss.test.classinfo.support.ClassWithAnnotationWithClassArray;
import org.jboss.test.classinfo.support.ClassWithAnnotationWithInterfaceArray;
+import org.jboss.test.classinfo.support.ClassWithAnnotationWithPrimitiveClass;
import org.jboss.test.classinfo.support.ComplexAnnotation;
import org.jboss.test.classinfo.support.ExpectedAnnotations;
import org.jboss.test.classinfo.support.JDK14ExpectedAnnotations;
@@ -313,6 +314,13 @@
checkAnnotationWithClassAnnotation(info, String.class);
}
+
+ public void testPlainPrimitiveClassValueAnnotation() throws Exception
+ {
+ ClassInfo info = getClassInfo(ClassWithAnnotationWithPrimitiveClass.class);
+
+ checkAnnotationWithClassAnnotation(info, void.class);
+ }
public void testClassArrayValueAnnotation() throws Exception
{
More information about the jboss-cvs-commits
mailing list