[jboss-svn-commits] JBoss Common SVN: r4375 - in shrinkwrap/trunk/impl-base/src: main/java/org/jboss/shrinkwrap/impl/base/container and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun May 9 14:32:42 EDT 2010


Author: ALRubinger
Date: 2010-05-09 14:32:41 -0400 (Sun, 09 May 2010)
New Revision: 4375

Added:
   shrinkwrap/trunk/impl-base/src/test/java/ClassInDefaultPackage.java
   shrinkwrap/trunk/impl-base/src/test/java/DefaultPackageAddTestCase.java
Modified:
   shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/URLPackageScanner.java
   shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java
   shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/URLPackageScannerTestCase.java
Log:
[SHRINKWRAP-143] Allow classes in the default package to be added

Modified: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/URLPackageScanner.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/URLPackageScanner.java	2010-05-08 23:05:44 UTC (rev 4374)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/URLPackageScanner.java	2010-05-09 18:32:41 UTC (rev 4375)
@@ -46,6 +46,11 @@
 
    private static final Logger log = Logger.getLogger(URLPackageScanner.class.getName());
 
+   /**
+    * Name of the empty package
+    */
+   private static final String NAME_EMPTY_PACKAGE = "";
+
    private final String packageName;
 
    private final String packageNamePath;
@@ -53,31 +58,51 @@
    private final boolean addRecursively;
 
    private final ClassLoader classLoader;
-   
+
    //private final Set<String> classes = new HashSet<String>();
    private Callback callback;
 
    /**
     * Factory method to create an instance of URLPackageScanner.
+    * @param addRecursively flag to add child packages
+    * @param classLoader class loader that will have classes added
+    * @param pkg Package that will be scanned 
+    * @return new instance of URLPackageScanner
+    */
+   public static URLPackageScanner newInstance(boolean addRecursively, final ClassLoader classLoader,
+         final Callback callback, final Package pkg)
+   {
+      Validate
+            .notNull(pkg,
+                  "package must be specified; use alternate factory method if you wish to create a scanner for the default package ");
+      final String packageName = pkg.getName();
+      Validate.notNull(packageName, "Package name must be specified");
+      Validate.notNull(addRecursively, "AddRecursively must be specified");
+      Validate.notNull(classLoader, "ClassLoader must be specified");
+      Validate.notNull(callback, "Callback must be specified");
+
+      return new URLPackageScanner(packageName, addRecursively, classLoader, callback);
+   }
+
+   /**
+    * Factory method to create an instance of URLPackageScanner in the default package
     * @param pkg Package that will be scanned
     * @param addRecursively flag to add child packages
     * @param classLoader class loader that will have classes added 
     * @return new instance of URLPackageScanner
     */
-   public static URLPackageScanner newInstance(Package pkg, boolean addRecursively, ClassLoader classLoader, Callback callback)
+   public static URLPackageScanner newInstance(boolean addRecursively, ClassLoader classLoader, Callback callback)
    {
-      Validate.notNull(pkg, "Pkg must be specified");
-      Validate.notNull(pkg.getName(), "Pkg must have a name");
       Validate.notNull(addRecursively, "AddRecursively must be specified");
       Validate.notNull(classLoader, "ClassLoader must be specified");
       Validate.notNull(callback, "Callback must be specified");
 
-      return new URLPackageScanner(pkg, addRecursively, classLoader, callback);
+      return new URLPackageScanner(NAME_EMPTY_PACKAGE, addRecursively, classLoader, callback);
    }
 
-   private URLPackageScanner(Package pkg, boolean addRecursively, ClassLoader classLoader, Callback callback)
+   private URLPackageScanner(String packageName, boolean addRecursively, ClassLoader classLoader, Callback callback)
    {
-      this.packageName = pkg.getName();
+      this.packageName = packageName;
       this.packageNamePath = packageName.replace(".", "/");
       this.addRecursively = addRecursively;
       this.classLoader = classLoader;
@@ -164,7 +189,8 @@
       {
          if (!child.isDirectory() && child.getName().endsWith(".class"))
          {
-            foundClass(packageName + "." + child.getName().substring(0, child.getName().lastIndexOf(".class")));
+            final String packagePrefix = packageName.length() > 0 ? packageName + "." : packageName;
+            foundClass(packagePrefix + child.getName().substring(0, child.getName().lastIndexOf(".class")));
          }
          else if (child.isDirectory() && addRecursively)
          {
@@ -173,25 +199,23 @@
       }
    }
 
-   private void foundClass(String className) 
+   private void foundClass(String className)
    {
       callback.classFound(className);
    }
-   
-   
+
    private List<URL> loadResources(String name) throws IOException
    {
       return Collections.list(classLoader.getResources(name));
    }
 
-   
    /**
     * Callback interface for found classes.
     *
     * @author <a href="mailto:aknutsen at redhat.com">Aslak Knutsen</a>
     * @version $Revision: $
     */
-   public interface Callback 
+   public interface Callback
    {
       /**
        * Called for each found class.

Modified: shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java	2010-05-08 23:05:44 UTC (rev 4374)
+++ shrinkwrap/trunk/impl-base/src/main/java/org/jboss/shrinkwrap/impl/base/container/ContainerBase.java	2010-05-09 18:32:41 UTC (rev 4375)
@@ -914,32 +914,33 @@
       
       for(Package pack : packages) 
       {
-         URLPackageScanner.newInstance(
-               pack, recursive, classLoader, 
-               new URLPackageScanner.Callback()
+         final URLPackageScanner.Callback callback = new URLPackageScanner.Callback()
+         {
+            @Override
+            public void classFound(String className)
+            {
+               ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className);
+               if (!filter.include(classNamePath))
                {
-                  @Override
-                  public void classFound(String className)
-                  {
-                     ArchivePath classNamePath = AssetUtil.getFullPathForClassResource(className);
-                     if(!filter.include(classNamePath))
-                     {
-                        return;
-                     }
-                     Class<?> clazz;
-                     try
-                     {
-                        clazz = classLoader.loadClass(className);
-                     } 
-                     catch (ClassNotFoundException e)
-                     {
-                        throw new IllegalStateException("Could not load found class " + className);
-                     }
-                     Asset asset = new ClassAsset(clazz);
-                     ArchivePath location = new BasicPath(getClassesPath(), classNamePath);
-                     add(asset, location);
-                  }
-               }).scanPackage();
+                  return;
+               }
+               Class<?> clazz;
+               try
+               {
+                  clazz = classLoader.loadClass(className);
+               }
+               catch (ClassNotFoundException e)
+               {
+                  throw new RuntimeException("Could not load found class " + className, e);
+               }
+               Asset asset = new ClassAsset(clazz);
+               ArchivePath location = new BasicPath(getClassesPath(), classNamePath);
+               add(asset, location);
+            }
+         };
+         final URLPackageScanner scanner = pack == null ? URLPackageScanner.newInstance(recursive, classLoader,
+               callback) : URLPackageScanner.newInstance(recursive, classLoader, callback, pack);
+         scanner.scanPackage();
       }
       return covarientReturn();
    }

Added: shrinkwrap/trunk/impl-base/src/test/java/ClassInDefaultPackage.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/ClassInDefaultPackage.java	                        (rev 0)
+++ shrinkwrap/trunk/impl-base/src/test/java/ClassInDefaultPackage.java	2010-05-09 18:32:41 UTC (rev 4375)
@@ -0,0 +1,35 @@
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * A testing class in the default package for SHRINKWRAP-143
+ * 
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class ClassInDefaultPackage
+{
+   //-------------------------------------------------------------------------------------||
+   // Inner Classes ----------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   public static class InnerClassInDefaultPackage
+   {
+
+   }
+
+}

Added: shrinkwrap/trunk/impl-base/src/test/java/DefaultPackageAddTestCase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/DefaultPackageAddTestCase.java	                        (rev 0)
+++ shrinkwrap/trunk/impl-base/src/test/java/DefaultPackageAddTestCase.java	2010-05-09 18:32:41 UTC (rev 4375)
@@ -0,0 +1,76 @@
+import java.util.logging.Logger;
+
+import org.jboss.shrinkwrap.api.ArchivePath;
+import org.jboss.shrinkwrap.api.ArchivePaths;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.spec.JavaArchive;
+import org.junit.Assert;
+import org.junit.Test;
+
+/*
+ * JBoss, Home of Professional Open Source
+ * Copyright 2010, Red Hat Middleware LLC, and individual contributors
+ * by the @authors tag. See the copyright.txt in the distribution for a
+ * full listing of individual contributors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Ensures that we can add classes in the default package to an archive.
+ * This test is also in the default package due to compiler restrictions on
+ * importing from default package.
+ * 
+ * SHIRNKWRAP-143
+ * 
+ * @author <a href="mailto:andrew.rubinger at jboss.org">ALR</a>
+ * @version $Revision: $
+ */
+public class DefaultPackageAddTestCase
+{
+
+   //-------------------------------------------------------------------------------------||
+   // Class Members ----------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /**
+    * Logger
+    */
+   private static final Logger log = Logger.getLogger(DefaultPackageAddTestCase.class.getName());
+
+   //-------------------------------------------------------------------------------------||
+   // Tests ------------------------------------------------------------------------------||
+   //-------------------------------------------------------------------------------------||
+
+   /**
+    * Ensures that classes from the default package may be added
+    * 
+    * SHRINKWRAP-143
+    */
+   @Test
+   public void canAddClassFromDefaultPackage() throws Exception
+   {
+      // Create an archive with Classes from the default package
+      final JavaArchive archive = ShrinkWrap.create("test.jar", JavaArchive.class)
+            .addClass(ClassInDefaultPackage.class);
+      log.info(archive.toString(true));
+
+      // Ensure the classes were added in the paths expected
+      final ArchivePath classInDefaultPackagePath = ArchivePaths.create("/ClassInDefaultPackage.class");
+      final ArchivePath innerClassInDefaultPackagePath = ArchivePaths
+            .create("/ClassInDefaultPackage$InnerClassInDefaultPackage.class");
+      Assert.assertTrue("Class in default package was not added to archive", archive
+            .contains(classInDefaultPackagePath));
+      Assert.assertTrue("Inner class in default package was not added to archive", archive
+            .contains(innerClassInDefaultPackagePath));
+   }
+
+}

Modified: shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/URLPackageScannerTestCase.java
===================================================================
--- shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/URLPackageScannerTestCase.java	2010-05-08 23:05:44 UTC (rev 4374)
+++ shrinkwrap/trunk/impl-base/src/test/java/org/jboss/shrinkwrap/impl/base/URLPackageScannerTestCase.java	2010-05-09 18:32:41 UTC (rev 4375)
@@ -32,16 +32,13 @@
    @Test(expected = IllegalArgumentException.class)
    public void shouldThrowExceptionNullPackage()
    {
-      URLPackageScanner.newInstance(
-            (Package)null, 
-            true,
-            URLPackageScannerTestCase.class.getClassLoader(), 
+      URLPackageScanner.newInstance(true, URLPackageScannerTestCase.class.getClassLoader(),
             new URLPackageScanner.Callback()
             {
                @Override
                public void classFound(String className)
                {
                }
-            });
+            }, (Package) null);
    }
 }



More information about the jboss-svn-commits mailing list