[jboss-cvs] JBossAS SVN: r103959 - in projects/scanning/trunk: indexer/src/main/java/org/jboss/scanning/indexer/core and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Apr 14 08:01:19 EDT 2010


Author: alesj
Date: 2010-04-14 08:01:18 -0400 (Wed, 14 Apr 2010)
New Revision: 103959

Removed:
   projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/providers/
Modified:
   projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/Main.java
   projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/core/ScanUtils.java
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/AnnotationsScanningPlugin.java
   projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hierarchy/plugins/HierarchyIndexScanningPlugin.java
   projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/IntrospectionReflectProvider.java
Log:
Simplify pluing usage in indexer.

Modified: projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/Main.java
===================================================================
--- projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/Main.java	2010-04-14 11:52:03 UTC (rev 103958)
+++ projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/Main.java	2010-04-14 12:01:18 UTC (rev 103959)
@@ -28,7 +28,6 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.jboss.scanning.indexer.core.PluginProvider;
 import org.jboss.scanning.indexer.core.ScanUtils;
 
 /**
@@ -69,7 +68,7 @@
                urls[i] = new File(args[i + 1]).toURI().toURL();
 
             // TODO -- add scanning plugins
-            ScanUtils.scan(input, urls, Collections.<PluginProvider>emptySet());
+            ScanUtils.scan(input, urls, Collections.<String>emptySet());
          }
          else
          {

Modified: projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/core/ScanUtils.java
===================================================================
--- projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/core/ScanUtils.java	2010-04-14 11:52:03 UTC (rev 103958)
+++ projects/scanning/trunk/indexer/src/main/java/org/jboss/scanning/indexer/core/ScanUtils.java	2010-04-14 12:01:18 UTC (rev 103959)
@@ -26,6 +26,7 @@
 import java.io.File;
 import java.io.FileOutputStream;
 import java.io.ObjectOutputStream;
+import java.lang.reflect.Constructor;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.util.HashSet;
@@ -89,7 +90,7 @@
     * @param pluginProviders the providers for plugins used while scanning
     * @throws Exception for any error
     */
-   public static void scan(File input, URL[] cp, Set<PluginProvider> pluginProviders) throws Exception
+   public static void scan(File input, URL[] cp, Set<String> pluginProviders) throws Exception
    {
       URL root = input.toURI().toURL();
       URL[] urls = new URL[cp.length + 1];
@@ -98,8 +99,8 @@
 
       URLClassLoader ucl = new URLClassLoader(urls, ScanUtils.class.getClassLoader());
       Set<ScanningPlugin> plugins = new HashSet<ScanningPlugin>();
-      for (PluginProvider provider : pluginProviders)
-         plugins.add(provider.create(ucl));
+      for (String provider : pluginProviders)
+         plugins.add(createPlugin(provider, ucl));
 
       DefaultScanner scaner = new DefaultScanner(ucl, root);
       scaner.setPlugins(plugins);
@@ -117,4 +118,41 @@
       FileUtil.compress(jar, output);
       FileUtil.recursiveDelete(jar);
    }
+
+   /**
+    * Create plugin.
+    *
+    * If the provider is actual plugin,
+    * it must take classloader as a single parameter with constructor.
+    *
+    * @param provider the provider; can be actual plugin or intermediate PluginProvider
+    * @param ucl the current CL
+    * @return new plugin instance
+    * @throws Exception for any error
+    */
+   private static ScanningPlugin createPlugin(String provider, URLClassLoader ucl) throws Exception
+   {
+      Class<?> clazz = ucl.loadClass(provider);
+      if (ScanningPlugin.class.isAssignableFrom(clazz))
+      {
+         try
+         {
+            // let's first try no-arg ctor
+            return (ScanningPlugin) clazz.newInstance();
+         }
+         catch (Exception e)
+         {
+            // fall back to CL arg ctor
+            Constructor<?> ctor = clazz.getDeclaredConstructor(ClassLoader.class);
+            return (ScanningPlugin) ctor.newInstance(ucl);
+         }
+      }
+      else if (PluginProvider.class.isAssignableFrom(clazz))
+      {
+         PluginProvider pp = (PluginProvider) clazz.newInstance();
+         return pp.create(ucl);
+      }
+      else
+         throw new IllegalArgumentException("Cannot create plugin from " + provider);
+   }
 }

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/AnnotationsScanningPlugin.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/AnnotationsScanningPlugin.java	2010-04-14 11:52:03 UTC (rev 103958)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/annotations/plugins/AnnotationsScanningPlugin.java	2010-04-14 12:01:18 UTC (rev 103959)
@@ -26,7 +26,9 @@
 import org.jboss.classloading.spi.visitor.ResourceFilter;
 import org.jboss.classloading.spi.visitor.ResourceVisitor;
 import org.jboss.scanning.annotations.spi.AnnotationIndex;
+import org.jboss.scanning.plugins.helpers.ClassResourceOwnerFinder;
 import org.jboss.scanning.plugins.helpers.ResourceOwnerFinder;
+import org.jboss.scanning.plugins.visitor.IntrospectionReflectProvider;
 import org.jboss.scanning.plugins.visitor.ReflectProvider;
 import org.jboss.scanning.spi.helpers.AbstractScanningPlugin;
 
@@ -42,6 +44,11 @@
    /** The visitor */
    private final ResourceVisitor visitor;
 
+   public AnnotationsScanningPlugin(ClassLoader cl)
+   {
+      this(IntrospectionReflectProvider.INSTANCE, ClassResourceOwnerFinder.INSTANCE, cl);
+   }
+
    public AnnotationsScanningPlugin(ReflectProvider provider, ResourceOwnerFinder finder, ClassLoader cl)
    {
       repository = new DefaultAnnotationRepository(cl);

Modified: projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hierarchy/plugins/HierarchyIndexScanningPlugin.java
===================================================================
--- projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hierarchy/plugins/HierarchyIndexScanningPlugin.java	2010-04-14 11:52:03 UTC (rev 103958)
+++ projects/scanning/trunk/plugins/src/main/java/org/jboss/scanning/hierarchy/plugins/HierarchyIndexScanningPlugin.java	2010-04-14 12:01:18 UTC (rev 103959)
@@ -27,7 +27,9 @@
 import org.jboss.classloading.spi.visitor.ResourceFilter;
 import org.jboss.classloading.spi.visitor.ResourceVisitor;
 import org.jboss.scanning.hierarchy.spi.HierarchyIndex;
+import org.jboss.scanning.plugins.helpers.ClassResourceOwnerFinder;
 import org.jboss.scanning.plugins.helpers.ResourceOwnerFinder;
+import org.jboss.scanning.plugins.visitor.IntrospectionReflectProvider;
 import org.jboss.scanning.plugins.visitor.ReflectProvider;
 import org.jboss.scanning.spi.helpers.AbstractScanningPlugin;
 
@@ -43,6 +45,11 @@
    /** The visitor */
    private final ResourceVisitor visitor;
 
+   public HierarchyIndexScanningPlugin()
+   {
+      this(IntrospectionReflectProvider.INSTANCE, ClassResourceOwnerFinder.INSTANCE);
+   }
+
    public HierarchyIndexScanningPlugin(ReflectProvider provider, ResourceOwnerFinder finder)
    {
       hierarchy = new HierarchyIndexImpl();

Modified: projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/IntrospectionReflectProvider.java
===================================================================
--- projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/IntrospectionReflectProvider.java	2010-04-14 11:52:03 UTC (rev 103958)
+++ projects/scanning/trunk/scanning-impl/src/main/java/org/jboss/scanning/plugins/visitor/IntrospectionReflectProvider.java	2010-04-14 12:01:18 UTC (rev 103959)
@@ -33,8 +33,14 @@
  */
 public class IntrospectionReflectProvider implements ReflectProvider
 {
+   public static final ReflectProvider INSTANCE = new IntrospectionReflectProvider();
+
    private IntrospectionTypeInfoFactory factory = new IntrospectionTypeInfoFactory();
 
+   private IntrospectionReflectProvider()
+   {
+   }
+
    public TypeInfo getTypeInfo(ResourceContext resource) throws Throwable
    {
       return factory.getTypeInfo(resource.loadClass());




More information about the jboss-cvs-commits mailing list