From 075c6a2a1f7a478781cb2b5bc40558f881de5548 Mon Sep 17 00:00:00 2001 From: Rafael Winterhalter Date: Mon, 11 Dec 2023 11:32:55 +0100 Subject: [PATCH] Add configuration for plugins to avoid use of deprecated raw arguments. --- .../AbstractJavaGeneratorMojo.java | 24 ++++++++++++++++++ .../shared/arguments/ArgumentBuilder.java | 25 +++++++++++++++++++ .../shared/arguments/ArgumentBuilderTest.java | 22 ++++++++++++++++ 3 files changed, 71 insertions(+) diff --git a/src/main/java/org/codehaus/mojo/jaxb2/javageneration/AbstractJavaGeneratorMojo.java b/src/main/java/org/codehaus/mojo/jaxb2/javageneration/AbstractJavaGeneratorMojo.java index 632a6d40..ca402fee 100644 --- a/src/main/java/org/codehaus/mojo/jaxb2/javageneration/AbstractJavaGeneratorMojo.java +++ b/src/main/java/org/codehaus/mojo/jaxb2/javageneration/AbstractJavaGeneratorMojo.java @@ -224,6 +224,26 @@ public abstract class AbstractJavaGeneratorMojo extends AbstractJaxbMojo { @Parameter(defaultValue = "false") protected boolean readOnly; + /** + *

List of plugins that should be enabled.

+ *
+     * 
+     *   <configuration>
+     *   ...
+     *       <plugins>
+     *          <plugin>fluent-api</plugin>
+     *          <plugin>inheritance</plugin>
+     *      </plugins>
+     *   </configuration>
+     * 
+     * 
+ *

The arguments configured above yields the following extra arguments to the XJC command: + * -Xfluent-api -Xinheritance

+ * + * @since 3.2 + */ + protected List plugins; + /** *

List of ordered extra arguments to the XJC command. Each extra argument is interpreted as a word, intended * to be copied verbatim to the XJC argument list with spaces in between:

@@ -634,6 +654,10 @@ private String[] getXjcArguments(final String classPath, final String episodeFil builder.withNamedArgument("catalog", FileSystemUtilities.getCanonicalPath(catalog)); } + if (plugins != null) { + builder.withPrefixedArguments("X", plugins); + } + if (arguments != null) { builder.withPreCompiledArguments(arguments); } diff --git a/src/main/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilder.java b/src/main/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilder.java index d7393f2b..c50fa77b 100644 --- a/src/main/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilder.java +++ b/src/main/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilder.java @@ -180,6 +180,31 @@ public ArgumentBuilder withNamedArgument(final String name, final String value) return this; } + /** + * Adds the supplied prefixed arguments in the same order as they were given. + * + * @param prefix The prefix to add. + * @param values A non-null List holding arguments. + * @return This ArgumentBuilder, for chaining. + */ + public ArgumentBuilder withPrefixedArguments(String prefix, final List values) { + + // Check sanity + Validate.notNull(prefix, "prefix"); + Validate.notNull(values, "arguments"); + + // Add the arguments in the exact order they were given. + synchronized (lock) { + for (String value : values) { + String trimmedValue = value.trim(); + arguments.add("-" + prefix + trimmedValue); + } + } + + // All done. + return this; + } + /** * Adds the supplied pre-compiled arguments in the same order as they were given. * diff --git a/src/test/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilderTest.java b/src/test/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilderTest.java index 0739fc1f..809ef36d 100644 --- a/src/test/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilderTest.java +++ b/src/test/java/org/codehaus/mojo/jaxb2/shared/arguments/ArgumentBuilderTest.java @@ -3,6 +3,8 @@ import org.junit.Assert; import org.junit.Test; +import java.util.Arrays; + /** * @author Lennart Jörelid */ @@ -86,4 +88,24 @@ public void validateMixedArguments() { Assert.assertEquals("value1", result[1]); Assert.assertEquals("-flag2", result[2]); } + + @Test + public void validatePrefixedArgument() { + + // Assemble + final ArgumentBuilder unitUnderTest = new ArgumentBuilder(); + + // Act + final String[] result = unitUnderTest + .withPrefixedArguments("X", Arrays.asList("plugin1", "plugin2")) + .withPrefixedArguments("X", Arrays.asList("plugin3", "plugin4")) + .build(); + + // Assert + Assert.assertEquals(4, result.length); + Assert.assertEquals("-Xplugin1", result[0]); + Assert.assertEquals("-Xplugin2", result[1]); + Assert.assertEquals("-Xplugin3", result[2]); + Assert.assertEquals("-Xplugin4", result[3]); + } }