From b0ad8ad05665a90ccf01ecb80f5b6162d9acc77a Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Sun, 23 Mar 2025 18:35:56 -0700 Subject: [PATCH] Read @argfile manually --- .../bld/extension/CompileKotlinOperation.java | 4 +-- .../bld/extension/kotlin/CompileOptions.java | 29 ++++++++++++++++++- .../extension/CompileKotlinOperationTest.java | 5 ++-- .../extension/kotlin/CompileOptionsTest.java | 5 +--- src/test/resources/argfile.txt | 3 ++ src/test/resources/argfile2.txt | 1 + 6 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 src/test/resources/argfile.txt create mode 100644 src/test/resources/argfile2.txt diff --git a/src/main/java/rife/bld/extension/CompileKotlinOperation.java b/src/main/java/rife/bld/extension/CompileKotlinOperation.java index 26437a8..1aeb930 100644 --- a/src/main/java/rife/bld/extension/CompileKotlinOperation.java +++ b/src/main/java/rife/bld/extension/CompileKotlinOperation.java @@ -616,10 +616,10 @@ public class CompileKotlinOperation extends AbstractOperation advancedOptions_ = new ArrayList<>(); private final Collection argFile_ = new ArrayList<>(); private final Collection classpath_ = new ArrayList<>(); @@ -248,7 +255,27 @@ public class CompileOptions { // @argfile if (!argFile_.isEmpty()) { - argFile_.forEach(f -> args.add("@" + f.getAbsolutePath())); + argFile_.forEach(f -> { + if (f.exists()) { + try { + try (var reader = Files.newBufferedReader(f.toPath(), Charset.defaultCharset())) { + var tokenizer = new AbstractToolProviderOperation.CommandLineTokenizer(reader); + String token; + while ((token = tokenizer.nextToken()) != null) { + args.add(token); + } + } + } catch (IOException e) { + if (LOGGER.isLoggable(Level.WARNING)) { + LOGGER.log(Level.WARNING, "Could not read: " + f.getAbsolutePath(), e); + } + } + } else { + if (LOGGER.isLoggable(Level.WARNING)) { + LOGGER.warning("File not found: " + f.getAbsolutePath()); + } + } + }); } // expression diff --git a/src/test/java/rife/bld/extension/CompileKotlinOperationTest.java b/src/test/java/rife/bld/extension/CompileKotlinOperationTest.java index eeaf75e..4e0182e 100644 --- a/src/test/java/rife/bld/extension/CompileKotlinOperationTest.java +++ b/src/test/java/rife/bld/extension/CompileKotlinOperationTest.java @@ -180,7 +180,7 @@ class CompileKotlinOperationTest { .compileTestClasspath(mainDir.getAbsolutePath()); op.compileOptions().verbose(true); - op.compileOptions().jdkRelease("17"); + op.compileOptions().argFile("src/test/resources/argfile.txt", "src/test/resources/argfile2.txt"); if (!CompileKotlinOperation.isWindows()) { op.jvmOptions().enableNativeAccess(JvmOptions.ALL_UNNAMED); @@ -188,7 +188,8 @@ class CompileKotlinOperationTest { } var args = op.compileOptions().args(); - var matches = List.of("-Xjdk-release=17", "-no-stdlib", "-verbose"); + var matches = List.of("-Xjdk-release=17", "-no-reflect", "-progressive", "-include-runtime", "-no-stdlib", + "-verbose"); assertThat(args).as(args + " == " + matches).isEqualTo(matches); op.execute(); diff --git a/src/test/java/rife/bld/extension/kotlin/CompileOptionsTest.java b/src/test/java/rife/bld/extension/kotlin/CompileOptionsTest.java index 83d29fc..0f498a2 100644 --- a/src/test/java/rife/bld/extension/kotlin/CompileOptionsTest.java +++ b/src/test/java/rife/bld/extension/kotlin/CompileOptionsTest.java @@ -52,7 +52,6 @@ class CompileOptionsTest { void testArgs() { var options = new CompileOptions() .apiVersion("11") - .argFile(new File("file.txt"), new File("file2.txt")) .javaParameters(true) .jvmTarget("11") .includeRuntime(true) @@ -76,7 +75,6 @@ class CompileOptionsTest { var matches = List.of( "-api-version", "11", - "@" + localPath("file.txt"), "@" + localPath("file2.txt"), "-java-parameters", "-jvm-target", "11", "-include-runtime", @@ -210,7 +208,6 @@ class CompileOptionsTest { var params = new CompileOptions() .advancedOptions("Xoption") .apiVersion("11") - .argFile("file") .expression("expression") .includeRuntime(true) .javaParameters(true) @@ -233,7 +230,7 @@ class CompileOptionsTest { .wError(true) .wExtra(true); - var skipArgs = List.of("-J", "-classpath"); + var skipArgs = List.of("-J", "-classpath", "@"); assertThat(args).as(skipArgs + " not found.").containsAll(skipArgs); args.removeAll(skipArgs); diff --git a/src/test/resources/argfile.txt b/src/test/resources/argfile.txt new file mode 100644 index 0000000..d128d62 --- /dev/null +++ b/src/test/resources/argfile.txt @@ -0,0 +1,3 @@ +-Xjdk-release=17 -no-reflect + +-progressive diff --git a/src/test/resources/argfile2.txt b/src/test/resources/argfile2.txt new file mode 100644 index 0000000..93f9181 --- /dev/null +++ b/src/test/resources/argfile2.txt @@ -0,0 +1 @@ +-include-runtime \ No newline at end of file