[jboss-cvs] JBossAS SVN: r103147 - projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/web/plugins.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Mar 29 10:50:49 EDT 2010


Author: alesj
Date: 2010-03-29 10:50:48 -0400 (Mon, 29 Mar 2010)
New Revision: 103147

Modified:
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/web/plugins/HierarchyTypeVisitor.java
Log:
Visit sub types.

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/web/plugins/HierarchyTypeVisitor.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/web/plugins/HierarchyTypeVisitor.java	2010-03-29 14:47:56 UTC (rev 103146)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/web/plugins/HierarchyTypeVisitor.java	2010-03-29 14:50:48 UTC (rev 103147)
@@ -28,6 +28,8 @@
 import org.jboss.classloading.spi.visitor.ResourceContext;
 import org.jboss.classloading.spi.visitor.ResourceFilter;
 import org.jboss.reflect.spi.ClassInfo;
+import org.jboss.reflect.spi.InterfaceInfo;
+import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.scanning.plugins.helpers.ResourceOwnerFinder;
 import org.jboss.scanning.plugins.visitor.ReflectProvider;
 import org.jboss.scanning.plugins.visitor.ReflectResourceVisitor;
@@ -41,6 +43,7 @@
 {
    private ResourceOwnerFinder finder;
    private DefaultResourcesIndex index;
+   private TypeInfo OBJECT;
 
    public HierarchyTypeVisitor(ReflectProvider provider, ResourceOwnerFinder finder, DefaultResourcesIndex index)
    {
@@ -62,6 +65,38 @@
    protected void handleClass(ResourceContext resource, ClassInfo classInfo) throws Exception
    {
       URL ownerURL = finder.findOwnerURL(resource);
-      // TODO -- handle hierarchy
+      String path = ownerURL.getPath();
+      handleInterfaces(path, classInfo, classInfo); // handle target's interfaces
+      recurse(path, classInfo, classInfo.getSuperclass()); // recurse on super class
    }
+
+   private void recurse(String path, final ClassInfo ci, ClassInfo sub)
+   {
+      if (sub == null)
+         return;
+
+      if (OBJECT == null)
+         OBJECT = sub.getTypeInfoFactory().getTypeInfo(Object.class);
+
+      if (sub == OBJECT) // no need to index Object sub-types
+         return;
+
+      index.putInfo(path, ci, sub); // sub on ref
+      handleInterfaces(path, ci, sub); // sub on ref's interfaces
+
+      // recurse
+      recurse(path, ci, sub.getSuperclass());
+   }
+
+   private void handleInterfaces(String path, ClassInfo ci, ClassInfo ref)
+   {
+      InterfaceInfo[] ifaces = ref.getInterfaces();
+      if (ifaces != null)
+      {
+         for (InterfaceInfo ii : ifaces)
+         {
+            recurse(path, ci, ii); // recurse on interface
+         }
+      }
+   }
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list