Skip to content

Commit 33ce238

Browse files
committed
Use Files.walkFileTree
1 parent 461af45 commit 33ce238

File tree

2 files changed

+23
-15
lines changed

2 files changed

+23
-15
lines changed

build-tools/src/integTest/groovy/org/elasticsearch/gradle/test/TestBuildInfoPluginFuncTest.groovy

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ class TestBuildInfoPluginFuncTest extends AbstractGradleFuncTest{
5757
"component", "example-component",
5858
"locations", List.of(location)
5959
)
60-
expectedOutput == new ObjectMapper().readValue(output, Map.class)
60+
new ObjectMapper().readValue(output, Map.class) == expectedOutput
6161

6262
}
6363
}

build-tools/src/main/java/org/elasticsearch/gradle/plugin/GenerateTestBuildInfoTask.java

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.gradle.api.tasks.Optional;
2323
import org.gradle.api.tasks.OutputFile;
2424
import org.gradle.api.tasks.TaskAction;
25+
import org.jetbrains.annotations.NotNull;
2526
import org.objectweb.asm.ClassReader;
2627
import org.objectweb.asm.ClassVisitor;
2728
import org.objectweb.asm.ModuleVisitor;
@@ -32,8 +33,11 @@
3233
import java.io.IOException;
3334
import java.io.InputStream;
3435
import java.nio.charset.StandardCharsets;
36+
import java.nio.file.FileVisitResult;
3537
import java.nio.file.Files;
3638
import java.nio.file.Path;
39+
import java.nio.file.SimpleFileVisitor;
40+
import java.nio.file.attribute.BasicFileAttributes;
3741
import java.security.CodeSource;
3842
import java.util.ArrayList;
3943
import java.util.Arrays;
@@ -45,6 +49,9 @@
4549
import java.util.regex.Pattern;
4650
import java.util.zip.ZipEntry;
4751

52+
import static java.nio.file.FileVisitResult.CONTINUE;
53+
import static java.nio.file.FileVisitResult.TERMINATE;
54+
4855
/**
4956
* This task generates a file with a class to module mapping
5057
* used to imitate modular behavior during unit tests so
@@ -257,22 +264,23 @@ private void extractLocationsFromDirectory(File dir, List<Location> locations) t
257264
* look through the directory to find the first unique class that isn't
258265
* module-info.class (which may not be unique) and avoid anonymous classes
259266
*/
260-
private String extractClassNameFromDirectory(File dir) {
261-
List<File> files = new ArrayList<>(List.of(dir));
262-
while (files.isEmpty() == false) {
263-
File find = files.removeFirst();
264-
if (find.exists()) {
265-
if (find.getName().endsWith(".class")
266-
&& find.getName().equals("module-info.class") == false
267-
&& find.getName().contains("$") == false) {
268-
return find.getAbsolutePath().substring(dir.getAbsolutePath().length() + 1);
269-
} else if (find.isDirectory()) {
270-
files.addAll(Arrays.asList(find.listFiles()));
267+
private String extractClassNameFromDirectory(File dir) throws IOException {
268+
var visitor = new SimpleFileVisitor<Path>() {
269+
String result = null;
270+
271+
@Override
272+
public @NotNull FileVisitResult visitFile(@NotNull Path candidate, @NotNull BasicFileAttributes attrs) {
273+
String name = candidate.getFileName().toString(); // Just the part after the last dir separator
274+
if (name.endsWith(".class") && (name.equals("module-info.class") || name.contains("$")) == false) {
275+
result = candidate.toAbsolutePath().toString().substring(dir.getAbsolutePath().length() + 1);
276+
return TERMINATE;
277+
} else {
278+
return CONTINUE;
271279
}
272280
}
273-
274-
}
275-
return null;
281+
};
282+
Files.walkFileTree(dir.toPath(), visitor);
283+
return visitor.result;
276284
}
277285

278286
/**

0 commit comments

Comments
 (0)