[jboss-user] [JBoss Microcontainer Development] - JBREFLECT-5 - Implementing generics in JavassistClassInfo

Kabir Khan do-not-reply at jboss.com
Tue Apr 27 15:55:53 EDT 2010


Kabir Khan [http://community.jboss.org/people/kabir.khan%40jboss.com] replied to the discussion

"JBREFLECT-5 - Implementing generics in JavassistClassInfo"

To view the discussion, visit: http://community.jboss.org/message/539885#539885

--------------------------------------------------------------
> I have tried turning off caching for these parameterized ClassInfos, which causes some of the tests to fail. From what I can see fixing them means having to adjust some of the tests to use assertEquals() instead of assertSame() for parameterized ClassInfos. I think this is necessary, and that the idea of enforcing object equality for parameterized ClassInfos is a misunderstanding :-)
Apart from this local fix in BeanInfoCacheTestCase, all the other places that test object equality for parameterized class infos are in tests written by me as part of JBREFLECT-5, so I think I am safe to readjust the tests

 
[kabir ~/sourcecontrol/jboss-reflect/trunk/jboss-reflect]
$svn diff src/test/
Index: src/test/java/org/jboss/test/beaninfo/test/BeanInfoCacheTestCase.java
===================================================================
--- src/test/java/org/jboss/test/beaninfo/test/BeanInfoCacheTestCase.java     (revision 104118)
+++ src/test/java/org/jboss/test/beaninfo/test/BeanInfoCacheTestCase.java     (working copy)
@@ -125,16 +125,45 @@
    {
       BeanInfo beanInfo = getConfiguration().getBeanInfo(typeInfo);
       ClassInfo typeInfo2 = beanInfo.getClassInfo();
-      assertSame(typeInfo, typeInfo2);
+      assertClassInfos(typeInfo, typeInfo2);
    }
-
+   
    private void assertClassInfo(ClassInfo typeInfo, String className, ClassLoader cl) throws Exception
    {
       BeanInfo beanInfo = getConfiguration().getBeanInfo(className, cl);
       ClassInfo typeInfo2 = beanInfo.getClassInfo();
-      assertSame(typeInfo, typeInfo2);
+      assertClassInfos(typeInfo, typeInfo2);
    }
 
+   private void assertClassInfos(TypeInfo typeA, TypeInfo typeB)
+   {
+      ClassInfo classA = assertInstanceOf(typeA, ClassInfo.class);
+      ClassInfo classB = assertInstanceOf(typeB, ClassInfo.class);
+      
+      if (classA.getRawType() == classA)
+         assertSame(classA, classB);
+      else
+      {
+         assertEquals(classA, classB);
+         TypeInfo[] argsA = classA.getActualTypeArguments();
+         TypeInfo[] argsB = classB.getActualTypeArguments();
+         
+         if (argsA != null)
+            assertNotNull(argsB);
+         if (argsB != null)
+            assertNotNull(argsA);
+         if (argsA == null)
+         {
+            assertNull(argsB);
+            return;
+         }
+         
+         assertEquals(argsA.length, argsB.length);
+         for (int i = 0 ; i < argsA.length ; i++)
+            assertClassInfos(argsA[i], argsB[i]);
+      }
+   }
+
    @SuppressWarnings("unchecked")
    protected Type getType(String type, Class<?> clazz) throws Exception
    {



--------------------------------------------------------------

Reply to this message by going to Community
[http://community.jboss.org/message/539885#539885]

Start a new discussion in JBoss Microcontainer Development at Community
[http://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2115]

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100427/5e51d99a/attachment.html 


More information about the jboss-user mailing list