[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