This is an automated email from the ASF dual-hosted git repository. gnodet pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/maven.git
commit 8af006a93106c344118ea1b90fa9b122c0a8f9b8 Author: Guillaume Nodet <gno...@gmail.com> AuthorDate: Mon Jan 13 08:46:35 2025 +0100 [MNG-8515] Replace plexus interpolator with the new interpolator service --- .../java/org/apache/maven/api/cli/Options.java | 6 +++--- .../org/apache/maven/api/cli/mvn/MavenOptions.java | 9 ++++----- .../maven/api/cli/mvnenc/EncryptOptions.java | 7 +++---- .../apache/maven/api/cli/mvnsh/ShellOptions.java | 7 +++---- .../org/apache/maven/cling/invoker/BaseParser.java | 5 +++-- .../java/org/apache/maven/cling/invoker/Utils.java | 23 ++++------------------ .../cling/invoker/mvn/CommonsCliMavenOptions.java | 21 ++++++++++---------- .../cling/invoker/mvn/LayeredMavenOptions.java | 6 +++--- .../invoker/mvnenc/CommonsCliEncryptOptions.java | 21 ++++++++++---------- .../invoker/mvnsh/CommonsCliShellOptions.java | 21 ++++++++++---------- 10 files changed, 53 insertions(+), 73 deletions(-) diff --git a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/Options.java b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/Options.java index 3b5a355d32..6adc57bac4 100644 --- a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/Options.java +++ b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/Options.java @@ -18,10 +18,10 @@ */ package org.apache.maven.api.cli; -import java.util.Collection; import java.util.Map; import java.util.Optional; import java.util.function.Consumer; +import java.util.function.Function; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -201,11 +201,11 @@ public interface Options { /** * Returns a new instance of {@link Options} with values interpolated using the given properties. * - * @param properties a collection of property maps to use for interpolation + * @param callback the callback to use for interpolation * @return a new {@link Options} instance with interpolated values */ @Nonnull - Options interpolate(@Nonnull Collection<Map<String, String>> properties); + Options interpolate(@Nonnull Function<String, String> callback); /** * Emits warning messages if deprecated options are used. diff --git a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvn/MavenOptions.java b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvn/MavenOptions.java index 1603e2747f..75a932ba8a 100644 --- a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvn/MavenOptions.java +++ b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvn/MavenOptions.java @@ -18,10 +18,9 @@ */ package org.apache.maven.api.cli.mvn; -import java.util.Collection; import java.util.List; -import java.util.Map; import java.util.Optional; +import java.util.function.Function; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -217,11 +216,11 @@ public interface MavenOptions extends Options { Optional<List<String>> goals(); /** - * Returns a new instance of {@link MavenOptions} with values interpolated using the given properties. + * Returns a new instance of {@link MavenOptions} with values interpolated using the given callback. * - * @param properties a collection of property maps to use for interpolation + * @param callback a callback to use for interpolation * @return a new MavenOptions instance with interpolated values */ @Nonnull - MavenOptions interpolate(@Nonnull Collection<Map<String, String>> properties); + MavenOptions interpolate(@Nonnull Function<String, String> callback); } diff --git a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnenc/EncryptOptions.java b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnenc/EncryptOptions.java index 910d0375ea..5e9456397b 100644 --- a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnenc/EncryptOptions.java +++ b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnenc/EncryptOptions.java @@ -18,10 +18,9 @@ */ package org.apache.maven.api.cli.mvnenc; -import java.util.Collection; import java.util.List; -import java.util.Map; import java.util.Optional; +import java.util.function.Function; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -61,9 +60,9 @@ public interface EncryptOptions extends Options { /** * Returns a new instance of EncryptOptions with values interpolated using the given properties. * - * @param properties a collection of property maps to use for interpolation + * @param callback a callback to use for interpolation * @return a new EncryptOptions instance with interpolated values */ @Nonnull - EncryptOptions interpolate(Collection<Map<String, String>> properties); + EncryptOptions interpolate(Function<String, String> callback); } diff --git a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnsh/ShellOptions.java b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnsh/ShellOptions.java index a55d4fd333..4777229b88 100644 --- a/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnsh/ShellOptions.java +++ b/api/maven-api-cli/src/main/java/org/apache/maven/api/cli/mvnsh/ShellOptions.java @@ -18,8 +18,7 @@ */ package org.apache.maven.api.cli.mvnsh; -import java.util.Collection; -import java.util.Map; +import java.util.function.Function; import org.apache.maven.api.annotations.Experimental; import org.apache.maven.api.annotations.Nonnull; @@ -36,9 +35,9 @@ public interface ShellOptions extends Options { /** * Returns a new instance of ShellOptions with values interpolated using the given properties. * - * @param properties a collection of property maps to use for interpolation + * @param callback a callback to use for interpolation * @return a new EncryptOptions instance with interpolated values */ @Nonnull - ShellOptions interpolate(Collection<Map<String, String>> properties); + ShellOptions interpolate(Function<String, String> callback); } diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java index e51d6311a7..466237e043 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/BaseParser.java @@ -44,6 +44,7 @@ import org.apache.maven.api.cli.Parser; import org.apache.maven.api.cli.ParserException; import org.apache.maven.api.cli.ParserRequest; import org.apache.maven.api.cli.extensions.CoreExtension; +import org.apache.maven.api.services.Interpolator; import org.apache.maven.cling.internal.extension.io.CoreExtensionsStaxReader; import org.apache.maven.cling.props.MavenPropertiesLoader; import org.apache.maven.cling.utils.CLIReportingUtils; @@ -122,8 +123,8 @@ public abstract class BaseParser implements Parser { context.userProperties = populateUserProperties(context); // options: interpolate - context.options = context.options.interpolate( - Arrays.asList(context.extraInterpolationSource(), context.userProperties, context.systemProperties)); + context.options = context.options.interpolate(Interpolator.chain( + context.extraInterpolationSource()::get, context.userProperties::get, context.systemProperties::get)); // core extensions context.extensions = readCoreExtensionsDescriptor(context); diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/Utils.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/Utils.java index 853cccc931..d4ab26da33 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/Utils.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/Utils.java @@ -20,7 +20,6 @@ package org.apache.maven.cling.invoker; import java.io.IOException; import java.nio.file.Path; -import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -30,12 +29,11 @@ import java.util.function.Function; import org.apache.maven.api.annotations.Nonnull; import org.apache.maven.api.annotations.Nullable; +import org.apache.maven.api.services.Interpolator; import org.apache.maven.api.services.model.RootLocator; import org.apache.maven.cling.logging.Slf4jConfiguration; import org.apache.maven.execution.MavenExecutionRequest; -import org.codehaus.plexus.interpolation.AbstractValueSource; -import org.codehaus.plexus.interpolation.BasicInterpolator; -import org.codehaus.plexus.interpolation.StringSearchInterpolator; +import org.apache.maven.internal.impl.model.DefaultInterpolator; import org.codehaus.plexus.logging.Logger; import static java.util.Objects.requireNonNull; @@ -90,21 +88,8 @@ public final class Utils { } @Nonnull - public static BasicInterpolator createInterpolator(Collection<Map<String, String>> properties) { - StringSearchInterpolator interpolator = new StringSearchInterpolator(); - interpolator.addValueSource(new AbstractValueSource(false) { - @Override - public Object getValue(String expression) { - for (Map<String, String> props : properties) { - String val = props.get(expression); - if (val != null) { - return val; - } - } - return null; - } - }); - return interpolator; + public static Interpolator createInterpolator() { + return new DefaultInterpolator(); } @Nonnull diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java index 33ff742d6b..c1885a6695 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/CommonsCliMavenOptions.java @@ -19,19 +19,18 @@ package org.apache.maven.cling.invoker.mvn; import java.util.Arrays; -import java.util.Collection; import java.util.List; import java.util.ListIterator; -import java.util.Map; import java.util.Optional; +import java.util.function.Function; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.ParseException; import org.apache.maven.api.cli.mvn.MavenOptions; +import org.apache.maven.api.services.Interpolator; +import org.apache.maven.api.services.InterpolatorException; import org.apache.maven.cling.invoker.CommonsCliOptions; -import org.codehaus.plexus.interpolation.BasicInterpolator; -import org.codehaus.plexus.interpolation.InterpolationException; import static org.apache.maven.cling.invoker.Utils.createInterpolator; @@ -46,27 +45,27 @@ public class CommonsCliMavenOptions extends CommonsCliOptions implements MavenOp } private static CommonsCliMavenOptions interpolate( - CommonsCliMavenOptions options, Collection<Map<String, String>> properties) { + CommonsCliMavenOptions options, Function<String, String> callback) { try { // now that we have properties, interpolate all arguments - BasicInterpolator interpolator = createInterpolator(properties); + Interpolator interpolator = createInterpolator(); CommandLine.Builder commandLineBuilder = new CommandLine.Builder(); commandLineBuilder.setDeprecatedHandler(o -> {}); for (Option option : options.commandLine.getOptions()) { if (!CLIManager.USER_PROPERTY.equals(option.getOpt())) { List<String> values = option.getValuesList(); for (ListIterator<String> it = values.listIterator(); it.hasNext(); ) { - it.set(interpolator.interpolate(it.next())); + it.set(interpolator.interpolate(it.next(), callback)); } } commandLineBuilder.addOption(option); } for (String arg : options.commandLine.getArgList()) { - commandLineBuilder.addArg(interpolator.interpolate(arg)); + commandLineBuilder.addArg(interpolator.interpolate(arg, callback)); } return new CommonsCliMavenOptions( options.source, (CLIManager) options.cliManager, commandLineBuilder.build()); - } catch (InterpolationException e) { + } catch (InterpolatorException e) { throw new IllegalArgumentException("Could not interpolate CommonsCliOptions", e); } } @@ -249,8 +248,8 @@ public class CommonsCliMavenOptions extends CommonsCliOptions implements MavenOp } @Override - public MavenOptions interpolate(Collection<Map<String, String>> properties) { - return interpolate(this, properties); + public MavenOptions interpolate(Function<String, String> callback) { + return interpolate(this, callback); } protected static class CLIManager extends CommonsCliOptions.CLIManager { diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/LayeredMavenOptions.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/LayeredMavenOptions.java index 79c25b8fd4..d19157af04 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/LayeredMavenOptions.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvn/LayeredMavenOptions.java @@ -21,9 +21,9 @@ package org.apache.maven.cling.invoker.mvn; import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Optional; +import java.util.function.Function; import org.apache.maven.api.cli.mvn.MavenOptions; import org.apache.maven.cling.invoker.LayeredOptions; @@ -160,10 +160,10 @@ public class LayeredMavenOptions<O extends MavenOptions> extends LayeredOptions< } @Override - public MavenOptions interpolate(Collection<Map<String, String>> properties) { + public MavenOptions interpolate(Function<String, String> callback) { ArrayList<MavenOptions> interpolatedOptions = new ArrayList<>(options.size()); for (MavenOptions o : options) { - interpolatedOptions.add(o.interpolate(properties)); + interpolatedOptions.add(o.interpolate(callback)); } return layerMavenOptions(interpolatedOptions); } diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnenc/CommonsCliEncryptOptions.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnenc/CommonsCliEncryptOptions.java index c21e3dce95..7059f8bafb 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnenc/CommonsCliEncryptOptions.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnenc/CommonsCliEncryptOptions.java @@ -18,12 +18,11 @@ */ package org.apache.maven.cling.invoker.mvnenc; -import java.util.Collection; import java.util.List; import java.util.ListIterator; -import java.util.Map; import java.util.Optional; import java.util.function.Consumer; +import java.util.function.Function; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; @@ -31,9 +30,9 @@ import org.apache.commons.cli.ParseException; import org.apache.maven.api.cli.Options; import org.apache.maven.api.cli.ParserRequest; import org.apache.maven.api.cli.mvnenc.EncryptOptions; +import org.apache.maven.api.services.Interpolator; +import org.apache.maven.api.services.InterpolatorException; import org.apache.maven.cling.invoker.CommonsCliOptions; -import org.codehaus.plexus.interpolation.BasicInterpolator; -import org.codehaus.plexus.interpolation.InterpolationException; import static org.apache.maven.cling.invoker.Utils.createInterpolator; @@ -51,27 +50,27 @@ public class CommonsCliEncryptOptions extends CommonsCliOptions implements Encry } private static CommonsCliEncryptOptions interpolate( - CommonsCliEncryptOptions options, Collection<Map<String, String>> properties) { + CommonsCliEncryptOptions options, Function<String, String> callback) { try { // now that we have properties, interpolate all arguments - BasicInterpolator interpolator = createInterpolator(properties); + Interpolator interpolator = createInterpolator(); CommandLine.Builder commandLineBuilder = new CommandLine.Builder(); commandLineBuilder.setDeprecatedHandler(o -> {}); for (Option option : options.commandLine.getOptions()) { if (!CLIManager.USER_PROPERTY.equals(option.getOpt())) { List<String> values = option.getValuesList(); for (ListIterator<String> it = values.listIterator(); it.hasNext(); ) { - it.set(interpolator.interpolate(it.next())); + it.set(interpolator.interpolate(it.next(), callback)); } } commandLineBuilder.addOption(option); } for (String arg : options.commandLine.getArgList()) { - commandLineBuilder.addArg(interpolator.interpolate(arg)); + commandLineBuilder.addArg(interpolator.interpolate(arg, callback)); } return new CommonsCliEncryptOptions( options.source, (CLIManager) options.cliManager, commandLineBuilder.build()); - } catch (InterpolationException e) { + } catch (InterpolatorException e) { throw new IllegalArgumentException("Could not interpolate CommonsCliOptions", e); } } @@ -101,8 +100,8 @@ public class CommonsCliEncryptOptions extends CommonsCliOptions implements Encry } @Override - public EncryptOptions interpolate(Collection<Map<String, String>> properties) { - return interpolate(this, properties); + public EncryptOptions interpolate(Function<String, String> callback) { + return interpolate(this, callback); } @Override diff --git a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnsh/CommonsCliShellOptions.java b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnsh/CommonsCliShellOptions.java index 04b1c36755..d64882896f 100644 --- a/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnsh/CommonsCliShellOptions.java +++ b/impl/maven-cli/src/main/java/org/apache/maven/cling/invoker/mvnsh/CommonsCliShellOptions.java @@ -18,19 +18,18 @@ */ package org.apache.maven.cling.invoker.mvnsh; -import java.util.Collection; import java.util.List; import java.util.ListIterator; -import java.util.Map; +import java.util.function.Function; import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.Option; import org.apache.commons.cli.ParseException; import org.apache.maven.api.cli.Options; import org.apache.maven.api.cli.mvnsh.ShellOptions; +import org.apache.maven.api.services.Interpolator; +import org.apache.maven.api.services.InterpolatorException; import org.apache.maven.cling.invoker.CommonsCliOptions; -import org.codehaus.plexus.interpolation.BasicInterpolator; -import org.codehaus.plexus.interpolation.InterpolationException; import static org.apache.maven.cling.invoker.Utils.createInterpolator; @@ -48,34 +47,34 @@ public class CommonsCliShellOptions extends CommonsCliOptions implements ShellOp } private static CommonsCliShellOptions interpolate( - CommonsCliShellOptions options, Collection<Map<String, String>> properties) { + CommonsCliShellOptions options, Function<String, String> callback) { try { // now that we have properties, interpolate all arguments - BasicInterpolator interpolator = createInterpolator(properties); + Interpolator interpolator = createInterpolator(); CommandLine.Builder commandLineBuilder = new CommandLine.Builder(); commandLineBuilder.setDeprecatedHandler(o -> {}); for (Option option : options.commandLine.getOptions()) { if (!CLIManager.USER_PROPERTY.equals(option.getOpt())) { List<String> values = option.getValuesList(); for (ListIterator<String> it = values.listIterator(); it.hasNext(); ) { - it.set(interpolator.interpolate(it.next())); + it.set(interpolator.interpolate(it.next(), callback)); } } commandLineBuilder.addOption(option); } for (String arg : options.commandLine.getArgList()) { - commandLineBuilder.addArg(interpolator.interpolate(arg)); + commandLineBuilder.addArg(interpolator.interpolate(arg, callback)); } return new CommonsCliShellOptions( options.source, (CLIManager) options.cliManager, commandLineBuilder.build()); - } catch (InterpolationException e) { + } catch (InterpolatorException e) { throw new IllegalArgumentException("Could not interpolate CommonsCliOptions", e); } } @Override - public ShellOptions interpolate(Collection<Map<String, String>> properties) { - return interpolate(this, properties); + public ShellOptions interpolate(Function<String, String> callback) { + return interpolate(this, callback); } protected static class CLIManager extends CommonsCliOptions.CLIManager {