From c1cf94f4d61c5244e39636bf579b8d2953bc5f68 Mon Sep 17 00:00:00 2001 From: Ashley Scopes <73482956+ascopes@users.noreply.github.com> Date: Wed, 2 Oct 2024 08:09:39 +0100 Subject: [PATCH] Simplify logic in ArgFileBuilder --- .../plugins/JvmPluginResolver.java | 4 +-- .../utils/ArgumentFileBuilder.java | 29 ++++++++++--------- .../utils/ArgumentFileBuilderTest.java | 10 ++----- 3 files changed, 19 insertions(+), 24 deletions(-) diff --git a/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/plugins/JvmPluginResolver.java b/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/plugins/JvmPluginResolver.java index 47e05a7d..ea79fce1 100644 --- a/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/plugins/JvmPluginResolver.java +++ b/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/plugins/JvmPluginResolver.java @@ -352,9 +352,7 @@ private Path writeArgFile( ArgumentFileBuilder argFileBuilder ) throws IOException { var argFile = scratchDir.resolve("args.txt"); - try (var writer = Files.newBufferedWriter(argFile, charset, StandardOpenOption.CREATE_NEW)) { - argFileBuilder.write(writer); - } + Files.writeString(argFile, argFileBuilder.toString(), charset, StandardOpenOption.CREATE_NEW); return argFile; } diff --git a/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilder.java b/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilder.java index 6eed0bbd..81ae7778 100644 --- a/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilder.java +++ b/protobuf-maven-plugin/src/main/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilder.java @@ -16,8 +16,6 @@ package io.github.ascopes.protobufmavenplugin.utils; -import java.io.IOException; -import java.io.Writer; import java.util.ArrayList; import java.util.List; @@ -44,41 +42,46 @@ public ArgumentFileBuilder add(Object argument) { return this; } - public void write(Writer writer) throws IOException { + @Override + public String toString() { + var sb = new StringBuilder(); + for (var argument : arguments) { if (argument.chars().noneMatch(c -> " \n\r\t'\"".indexOf(c) >= 0)) { - writer.append(argument).append("\n"); + sb.append(argument).append("\n"); continue; } - writer.append('"'); + sb.append('"'); for (var i = 0; i < argument.length(); ++i) { var nextChar = argument.charAt(i); switch (nextChar) { case '"': - writer.append("\\\""); + sb.append("\\\""); break; case '\'': - writer.append("\\'"); + sb.append("\\'"); break; case '\\': - writer.append("\\\\"); + sb.append("\\\\"); break; case '\n': - writer.append("\\n"); + sb.append("\\n"); break; case '\r': - writer.append("\\r"); + sb.append("\\r"); break; case '\t': - writer.append("\\t"); + sb.append("\\t"); break; default: - writer.append(nextChar); + sb.append(nextChar); break; } } - writer.append("\"\n"); + sb.append("\"\n"); } + + return sb.toString(); } } diff --git a/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilderTest.java b/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilderTest.java index 1563fe6a..07453afa 100644 --- a/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilderTest.java +++ b/protobuf-maven-plugin/src/test/java/io/github/ascopes/protobufmavenplugin/utils/ArgumentFileBuilderTest.java @@ -19,8 +19,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.params.provider.Arguments.arguments; -import java.io.IOException; -import java.io.StringWriter; import java.util.List; import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; @@ -37,7 +35,7 @@ class ArgumentFileBuilderTest { void argumentsAreConvertedToStringArgumentFileInExpectedFormat( List givenArguments, String expectedResult - ) throws IOException { + ) { // Given var builder = new ArgumentFileBuilder(); @@ -46,11 +44,7 @@ void argumentsAreConvertedToStringArgumentFileInExpectedFormat( builder.add(argument); } - String actualResult; - try (var stringWriter = new StringWriter()) { - builder.write(stringWriter); - actualResult = stringWriter.toString(); - } + var actualResult = builder.toString(); // Then assertThat(actualResult).isEqualTo(expectedResult);