Author: hlship Date: Mon Oct 31 22:15:48 2011 New Revision: 1195702 URL: http://svn.apache.org/viewvc?rev=1195702&view=rev Log: TAP5-1737: Loading all pages using PageCatalog page fails with java.lang.ClassFormatError: Illegal field modifiers in class org/apache/tapestry5/corelib/pages/package-info: 0x12
Modified: tapestry/tapestry5/branches/5.3/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java Modified: tapestry/tapestry5/branches/5.3/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java URL: http://svn.apache.org/viewvc/tapestry/tapestry5/branches/5.3/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java?rev=1195702&r1=1195701&r2=1195702&view=diff ============================================================================== --- tapestry/tapestry5/branches/5.3/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java (original) +++ tapestry/tapestry5/branches/5.3/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java Mon Oct 31 22:15:48 2011 @@ -33,6 +33,7 @@ import java.util.regex.Pattern; public class ClassNameLocatorImpl implements ClassNameLocator { private static final String CLASS_SUFFIX = ".class"; + public static final String PACKAGE_INFO = "package-info.class"; private final ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader(); @@ -247,15 +248,22 @@ public class ClassNameLocatorImpl implem if (!name.startsWith(packagePath)) continue; - if (!name.endsWith(CLASS_SUFFIX)) continue; - if (name.contains("$")) continue; + int lastSlashx = name.lastIndexOf('/'); - // Strip off .class and convert the slashes back to periods. + String fileName = name.substring(lastSlashx + 1); - String className = name.substring(0, name.length() - CLASS_SUFFIX.length()).replace("/", "."); + if (isClassName(fileName)) + { + + // Strip off .class and convert the slashes back to periods. + String className = + name.substring(0, lastSlashx + 1).replace('/', '.') + + fileName.substring(0, fileName.length() - CLASS_SUFFIX.length()); - componentClassNames.add(className); + + componentClassNames.add(className); + } } } @@ -279,7 +287,7 @@ public class ClassNameLocatorImpl implem } // https://issues.apache.org/jira/browse/TAP5-1737 // Use of package-info.java leaves these package-info.class files around. - else if (fileName.endsWith(CLASS_SUFFIX) && !fileName.equals("package-info.class")) + else if (isClassName(fileName)) { String className = packageName + "." + fileName.substring(0, fileName.length() - CLASS_SUFFIX.length()); @@ -289,6 +297,11 @@ public class ClassNameLocatorImpl implem } } + private boolean isClassName(String fileName) + { + return fileName.endsWith(CLASS_SUFFIX) && !fileName.equals(PACKAGE_INFO) && !fileName.contains("$"); + } + /** * For URLs to JARs that do not use JarURLConnection - allowed by the servlet spec - attempt to produce a JarFile * object all the same. Known servlet engines that function like this include Weblogic and OC4J. This is not a full