minor refactor: don't cache inner classes for the purpose of default import resolving
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 9c4befe..290c30e 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 @@
* @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 @@
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 @@
@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 76ac1af..f9db605 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 @@
}
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(