[jboss-cvs] JBossAS SVN: r102472 - in projects/jboss-reflect/trunk/src: test/java/org/jboss/test/plugins/javassist/support and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Mar 16 13:44:33 EDT 2010
Author: kabir.khan at jboss.com
Date: 2010-03-16 13:44:32 -0400 (Tue, 16 Mar 2010)
New Revision: 102472
Added:
projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/Interface.java
projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/StringCollection.java
Modified:
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java
projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java
projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java
Log:
Use CtClass.getClassFile2() instead of getClassFile() when looking for Signature attribute since the class may be frozen. Also, CtArray and CtPrimitive do not have a ClassFile, so don't attempt to read the Signature attribute for those.
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java 2010-03-16 17:30:18 UTC (rev 102471)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java 2010-03-16 17:44:32 UTC (rev 102472)
@@ -108,12 +108,15 @@
* @param clazz the CtClass
* @return the ClassSignature
*/
- static ClassSignature getClassSignature(CtClass clazz)
+ public static ClassSignature getClassSignature(CtClass clazz)
{
if (clazz == null)
throw new IllegalArgumentException("Null clazz");
- SignatureAttribute signature = (SignatureAttribute)clazz.getClassFile().getAttribute(SignatureAttribute.tag);
+ //Use getClassFile2 since in some cases the class has been frozen
+ if (clazz.isArray() || clazz.isPrimitive())
+ return null;
+ SignatureAttribute signature = (SignatureAttribute)clazz.getClassFile2().getAttribute(SignatureAttribute.tag);
if (signature == null)
return null;
String sig = signature.getSignature();
Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java 2010-03-16 17:30:18 UTC (rev 102471)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java 2010-03-16 17:44:32 UTC (rev 102472)
@@ -206,9 +206,9 @@
{
// looks like Javassist ClassPool::getClassLoader
// doesn't check for security, so we should
- SecurityManager sm = System.getSecurityManager();
- if (sm != null)
- sm.checkPermission(GET_CLASSLOADER_PERMISSION);
+// SecurityManager sm = System.getSecurityManager();
+// if (sm != null)
+// sm.checkPermission(GET_CLASSLOADER_PERMISSION);
return JavassistUtil.getClassLoader(ctClass);
}
Added: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/Interface.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/Interface.java (rev 0)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/Interface.java 2010-03-16 17:44:32 UTC (rev 102472)
@@ -0,0 +1,31 @@
+/*
+* 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.plugins.javassist.support;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface Interface<E>
+{
+}
Added: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/StringCollection.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/StringCollection.java (rev 0)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/support/StringCollection.java 2010-03-16 17:44:32 UTC (rev 102472)
@@ -0,0 +1,98 @@
+/*
+* 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.plugins.javassist.support;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class StringCollection implements Collection<String>
+{
+ public boolean add(String e)
+ {
+ return false;
+ }
+
+ public boolean addAll(Collection<? extends String> c)
+ {
+ return false;
+ }
+
+ public void clear()
+ {
+ }
+
+ public boolean contains(Object o)
+ {
+ return false;
+ }
+
+ public boolean containsAll(Collection<?> c)
+ {
+ return false;
+ }
+
+ public boolean isEmpty()
+ {
+ return false;
+ }
+
+ public Iterator<String> iterator()
+ {
+ return null;
+ }
+
+ public boolean remove(Object o)
+ {
+ return false;
+ }
+
+ public boolean removeAll(Collection<?> c)
+ {
+ return false;
+ }
+
+ public boolean retainAll(Collection<?> c)
+ {
+ return false;
+ }
+
+ public int size()
+ {
+ return 0;
+ }
+
+ public Object[] toArray()
+ {
+ return null;
+ }
+
+ public <T> T[] toArray(T[] a)
+ {
+ return null;
+ }
+
+}
Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java 2010-03-16 17:30:18 UTC (rev 102471)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java 2010-03-16 17:44:32 UTC (rev 102472)
@@ -22,16 +22,23 @@
package org.jboss.test.plugins.javassist.test;
import java.io.Serializable;
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
import java.util.Collection;
import javassist.ClassPool;
import javassist.CtClass;
+import javassist.CtPrimitiveType;
import javassist.NotFoundException;
+import javassist.bytecode.SignatureAttribute;
+import javassist.bytecode.SignatureAttribute.ClassSignature;
import junit.framework.Test;
import org.jboss.reflect.plugins.javassist.JavassistHelper;
import org.jboss.test.ContainerTest;
+import org.jboss.test.plugins.javassist.support.Interface;
import org.jboss.test.plugins.javassist.support.NumberChild;
+import org.jboss.test.plugins.javassist.support.StringCollection;
/**
*
@@ -61,7 +68,7 @@
assertTrue(JavassistHelper.determineHierarchy(null, number, object));
}
- public void testClassImplementsInterfaceDirectly() throws Exception
+ public void testDetermineHierarchyClassImplementsInterfaceDirectly() throws Exception
{
CtClass number = loadCtClass(Number.class);
CtClass seri = loadCtClass(Serializable.class);
@@ -69,7 +76,7 @@
assertTrue(JavassistHelper.determineHierarchy(null, number, seri));
}
- public void testClassImplementsInterfaceViaSuperclass() throws Exception
+ public void testDetermineHierarchyClassImplementsInterfaceViaSuperclass() throws Exception
{
CtClass numberChild = loadCtClass(NumberChild.class);
CtClass seri = loadCtClass(Serializable.class);
@@ -77,7 +84,7 @@
assertTrue(JavassistHelper.determineHierarchy(null, numberChild, seri));
}
- public void testClassDoesNotExtendSuperclass() throws Exception
+ public void testDetermineHierarchyClassDoesNotExtendSuperclass() throws Exception
{
CtClass numberChild = loadCtClass(NumberChild.class);
CtClass seri = loadCtClass(String.class);
@@ -85,14 +92,52 @@
assertFalse(JavassistHelper.determineHierarchy(null, numberChild, seri));
}
- public void testClassDoesNotExtendInterface() throws Exception
+ public void testDetermineHierarchyClassDoesNotExtendInterface() throws Exception
{
CtClass numberChild = loadCtClass(NumberChild.class);
CtClass collection = loadCtClass(Collection.class);
-
assertFalse(JavassistHelper.determineHierarchy(null, numberChild, collection));
}
+ public void testClassSignatureNormalClass() throws Exception
+ {
+ CtClass coll = loadCtClass(StringCollection.class);
+ ClassSignature sig = JavassistHelper.getClassSignature(coll);
+ assertNotNull(sig);
+ }
+
+ public void testClassSignatureArrayClass() throws Exception
+ {
+ CtClass collArray = ClassPool.getDefault().get(StringCollection.class.getName() + "[]");
+ ClassSignature sig = JavassistHelper.getClassSignature(collArray);
+ assertNull(sig);
+ }
+
+ public void testClassSignaturePrimitive() throws Exception
+ {
+ ClassSignature sig = JavassistHelper.getClassSignature(CtPrimitiveType.booleanType);
+ assertNull(sig);
+ }
+
+ public void testClassSignatureFrozenClass() throws Exception
+ {
+ CtClass clazz = ClassPool.getDefault().makeClass(Interface.class.getName() + "Impl");
+ clazz.addInterface(loadCtClass(Interface.class));
+ clazz.getClassFile().addAttribute(new SignatureAttribute(clazz.getClassFile().getConstPool(), "Ljava/lang/Object;Lorg/jboss/test/plugins/javassist/support/Interface<Ljava/lang/String;>;"));
+
+ Class<?> realClass = clazz.toClass();
+ assertEquals(1, realClass.getGenericInterfaces().length);
+ ParameterizedType type = assertInstanceOf(realClass.getGenericInterfaces()[0], ParameterizedType.class);
+ assertEquals(1, type.getActualTypeArguments().length);
+ assertEquals(String.class, type.getActualTypeArguments()[0]);
+ assertEquals(Interface.class, type.getRawType());
+
+ assertTrue(clazz.isFrozen());
+
+ ClassSignature sig = JavassistHelper.getClassSignature(clazz);
+ assertNotNull(sig);
+ }
+
private CtClass loadCtClass(Class<?> clazz) throws NotFoundException
{
return ClassPool.getDefault().get(clazz.getName());
More information about the jboss-cvs-commits
mailing list