[jboss-cvs] JBossAS SVN: r103332 - projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Mar 31 09:48:31 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-03-31 09:48:31 -0400 (Wed, 31 Mar 2010)
New Revision: 103332

Modified:
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java
Log:
[JBREFLECT-1] Implement getModifiers() and get(Generic)Interfaces() for arrays in Javassist

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java	2010-03-31 13:46:46 UTC (rev 103331)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistArrayInfoImpl.java	2010-03-31 13:48:31 UTC (rev 103332)
@@ -21,10 +21,15 @@
 */ 
 package org.jboss.reflect.plugins.javassist;
 
+import java.io.Serializable;
+
 import javassist.CtClass;
+import javassist.Modifier;
 
 import org.jboss.reflect.spi.AnnotationValue;
 import org.jboss.reflect.spi.ArrayInfo;
+import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.InterfaceInfo;
 import org.jboss.reflect.spi.PrimitiveInfo;
 import org.jboss.reflect.spi.TypeInfo;
 
@@ -41,6 +46,8 @@
    
    /** Unknown annotations */
    static final AnnotationValue[] UNKNOWN_ANNOTATIONS = new AnnotationValue[0];
+   
+   private volatile int modifiers;
 
    /** The component type */
    protected TypeInfo componentType;
@@ -136,4 +143,54 @@
       result = 29 * result + componentType.hashCode();
       hash = result;
    }
+
+   @Override
+   public InterfaceInfo[] getGenericInterfaces()
+   {
+      return getInterfaces();
+   }
+
+   @Override
+   public InterfaceInfo[] getInterfaces()
+   {
+      //Arrays will always implement Cloneable and Serializable (10.7 in Java Language specification)
+      InterfaceInfo cloneable = (InterfaceInfo)getFactory().get(Cloneable.class);
+      InterfaceInfo serializable = (InterfaceInfo)getFactory().get(Serializable.class);
+      return new InterfaceInfo[] {cloneable, serializable};
+   }
+
+   @Override
+   public int getModifiers()
+   {
+      //Array modifiers will be public/private/protected as the component type and are always final and abstract
+      if (modifiers == 0)
+      {
+         TypeInfo info = componentType;
+         if (info.isArray())
+            modifiers = ((ClassInfo)info).getModifiers();
+         else
+         {
+            int mod = 0;
+            if (componentType instanceof ClassInfo)
+            {
+               int typeModifiers = ((ClassInfo)componentType).getModifiers();
+   
+               if (Modifier.isPublic(typeModifiers))
+                  mod = Modifier.PUBLIC;
+               else if (Modifier.isProtected(typeModifiers))
+                  mod = Modifier.PROTECTED;
+               else if (Modifier.isPrivate(typeModifiers))
+                  mod = Modifier.PRIVATE;
+            }
+            else if (componentType instanceof PrimitiveInfo)
+            {
+               mod = Modifier.PUBLIC;
+            }
+            mod |= Modifier.FINAL;
+            mod |= Modifier.ABSTRACT;
+            modifiers = mod;
+         }
+      }
+      return modifiers;
+   }
 }




More information about the jboss-cvs-commits mailing list