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