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 {

Reply via email to