You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2011/10/31 23:15:27 UTC
svn commit: r1195700 -
/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java
Author: hlship
Date: Mon Oct 31 22:15:27 2011
New Revision: 1195700
URL: http://svn.apache.org/viewvc?rev=1195700&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/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java
Modified: tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java
URL: http://svn.apache.org/viewvc/tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java?rev=1195700&r1=1195699&r2=1195700&view=diff
==============================================================================
--- tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java (original)
+++ tapestry/tapestry5/trunk/tapestry-ioc/src/main/java/org/apache/tapestry5/ioc/internal/services/ClassNameLocatorImpl.java Mon Oct 31 22:15:27 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