[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