This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new 4de9597dde minor refactor: don't cache inner classes for the purpose 
of default import resolving
4de9597dde is described below

commit 4de9597dde2e3d0177e6589d45aa2c9020bf2709
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri May 3 20:42:13 2024 +1000

    minor refactor: don't cache inner classes for the purpose of default import 
resolving
---
 .../codehaus/groovy/vmplugin/v9/ClassFinder.java   | 27 ++++++++++++++++------
 .../org/codehaus/groovy/vmplugin/v9/Java9.java     |  2 +-
 2 files changed, 21 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java 
b/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
index 9c4befea33..290c30e00b 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/ClassFinder.java
@@ -83,6 +83,19 @@ public class ClassFinder {
      * @since 3.0.2
      */
     public static Map<String, Set<String>> find(URI classpathEntryURI, String 
packageName, boolean recursive) {
+        return find(classpathEntryURI, packageName, recursive, true);
+    }
+    /**
+     * Returns the found classes
+     *
+     * @param classpathEntryURI the classpath entry
+     * @param packageName the package under which we find classes
+     * @param recursive whether to find sub-packages
+     * @param innerClasses whether to find inner classes (class names 
containing a "$")
+     * @return the found classes
+     * @since 5.0.0
+     */
+    public static Map<String, Set<String>> find(URI classpathEntryURI, String 
packageName, boolean recursive, boolean innerClasses) {
         URI uri;
         String prefix;
         String scheme = classpathEntryURI.getScheme();
@@ -99,22 +112,22 @@ public class ClassFinder {
                 uri = URI.create("file:/");
                 prefix = path.toString();
             } else {
-                uri = URI.create("jar:" + classpathEntryURI.toString());
+                uri = URI.create("jar:" + classpathEntryURI);
                 prefix = "";
             }
         } else {
             throw new UnsupportedOperationException(classpathEntryURI + " is 
not supported");
         }
 
-        return find(uri, prefix, packageName, recursive);
+        return find(uri, prefix, packageName, recursive, innerClasses);
     }
 
-    private static Map<String, Set<String>> find(URI uri, String prefix, 
String packageName, boolean recursive) {
+    private static Map<String, Set<String>> find(URI uri, String prefix, 
String packageName, boolean recursive, final boolean innerClasses) {
         boolean wfs = "file".equals(uri.getScheme());
         if (wfs) prefix = prefix.replace("/", File.separator);
 
-        final String sepPatten = Pattern.quote(wfs ? File.separator : "/");
-        final int prefixElemCnt = prefix.trim().isEmpty() ? 0 : 
prefix.split(sepPatten).length;
+        final String sepPattern = Pattern.quote(wfs ? File.separator : "/");
+        final int prefixElemCnt = prefix.trim().isEmpty() ? 0 : 
prefix.split(sepPattern).length;
 
         Map<String, Set<String>> result = new LinkedHashMap<>();
         Tuple2<FileSystem, Boolean> fsMaybeNew = null;
@@ -128,14 +141,14 @@ public class ClassFinder {
 
                 @Override
                 public FileVisitResult visitFile(Path path, 
BasicFileAttributes attrs) {
-                    String[] pathElems = path.toString().split(sepPatten);
+                    String[] pathElems = path.toString().split(sepPattern);
                     int nameCount = pathElems.length;
                     if (nameCount <= prefixElemCnt) {
                         return FileVisitResult.CONTINUE;
                     }
 
                     String filename = pathElems[nameCount - 1];
-                    if (!filename.endsWith(".class") || 
"module-info.class".equals(filename) || "package-info.class".equals(filename)) {
+                    if ((!innerClasses && filename.contains("$")) || 
!filename.endsWith(".class") || "module-info.class".equals(filename) || 
"package-info.class".equals(filename)) {
                         return FileVisitResult.CONTINUE;
                     }
 
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java 
b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
index 76ac1af03f..f9db6051a0 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -132,7 +132,7 @@ public class Java9 extends Java8 {
     }
 
     private static Map<String, Set<String>> doFindClasses(final URI uri, final 
String packageName, final List<String> defaultPackageNames) {
-        Map<String, Set<String>> result = ClassFinder.find(uri, packageName, 
true)
+        Map<String, Set<String>> result = ClassFinder.find(uri, packageName, 
true, false)
                 .entrySet().stream()
                 .filter(e -> 
e.getValue().stream().anyMatch(defaultPackageNames::contains))
                 .collect(

Reply via email to