[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