From 983ea9e83d108ae39f0b851ea75933f08252dc7b Mon Sep 17 00:00:00 2001 From: Ryan Hecht Date: Thu, 27 Feb 2025 20:24:29 +0000 Subject: [PATCH] Added support for recursively searching classpath directories by specifying two asterisks after the directory name, e.g., /home/user/.m2/** --- .../config/CompilationUnitFactory.java | 35 ++++++++++++++++--- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java b/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java index 3a89786..964a31b 100644 --- a/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java +++ b/src/main/java/net/prominic/groovyls/config/CompilationUnitFactory.java @@ -133,7 +133,13 @@ protected void getClasspathList(List result) { for (String entry : additionalClasspathList) { boolean mustBeDirectory = false; - if (entry.endsWith("*")) { + boolean recursive = false; + + if (entry.endsWith("**")) { + entry = entry.substring(0, entry.length() - 2); + mustBeDirectory = true; + recursive = true; + } else if (entry.endsWith("*")) { entry = entry.substring(0, entry.length() - 1); mustBeDirectory = true; } @@ -143,12 +149,17 @@ protected void getClasspathList(List result) { continue; } if (file.isDirectory()) { - for (File child : file.listFiles()) { - if (!child.getName().endsWith(".jar") || !child.isFile()) { - continue; + if (recursive) { + addJarsRecursively(file, result); + } else { + for (File child : file.listFiles()) { + if (!child.getName().endsWith(".jar") || !child.isFile()) { + continue; + } + result.add(child.getPath()); } - result.add(child.getPath()); } + } else if (!mustBeDirectory && file.isFile()) { if (file.getName().endsWith(".jar")) { result.add(entry); @@ -157,6 +168,20 @@ protected void getClasspathList(List result) { } } + private void addJarsRecursively(File directory, List classpathList) { + if (directory == null || !directory.exists() || !directory.isDirectory()) { + return; + } + + for (File child : directory.listFiles()) { + if (child.isDirectory()) { + addJarsRecursively(child, classpathList); + } else if (child.getName().endsWith(".jar")) { + classpathList.add(child.getPath()); + } + } + } + protected void addDirectoryToCompilationUnit(Path dirPath, GroovyLSCompilationUnit compilationUnit, FileContentsTracker fileContentsTracker, Set changedUris) { try {