[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