michael-o commented on code in PR #1595:
URL: https://github.com/apache/maven/pull/1595#discussion_r1666551463


##########
maven-embedder/src/main/java/org/apache/maven/cli/props/InterpolationHelper.java:
##########
@@ -0,0 +1,364 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.maven.cli.props;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class InterpolationHelper {
+
+    private InterpolationHelper() {}
+
+    private static final char ESCAPE_CHAR = '\\';
+    private static final String DELIM_START = "${";
+    private static final String DELIM_STOP = "}";
+    private static final String MARKER = "$__";
+    private static final String ENV_PREFIX = "env:";
+
+    /**
+     * Callback for substitution
+     */
+    public interface SubstitutionCallback {
+
+        String getValue(String key);
+    }
+
+    /**
+     * Perform substitution on a property set
+     *
+     * @param properties the property set to perform substitution on
+     * @param callback Callback for substituion
+     */
+    public static void performSubstitution(Map<String, String> properties, 
SubstitutionCallback callback) {
+        performSubstitution(properties, callback, true, true, true);
+    }
+
+    /**
+     * Perform substitution on a property set
+     *
+     * @param properties the property set to perform substitution on
+     * @param callback the callback to obtain substitution values
+     * @param substituteFromConfig If substitute from configuration
+     * @param substituteFromSystemProperties If substitute from system 
properties
+     * @param defaultsToEmptyString sets an empty string if a replacement 
value is not found, leaves intact otherwise
+     */
+    public static void performSubstitution(
+            Map<String, String> properties,
+            SubstitutionCallback callback,
+            boolean substituteFromConfig,
+            boolean substituteFromSystemProperties,
+            boolean defaultsToEmptyString) {
+        Map<String, String> org = new HashMap<>(properties);
+        for (String name : properties.keySet()) {
+            properties.compute(
+                    name,
+                    (k, value) -> substVars(
+                            value,
+                            name,
+                            null,
+                            org,
+                            callback,
+                            substituteFromConfig,
+                            substituteFromSystemProperties,
+                            defaultsToEmptyString));
+        }
+    }
+
+    /**
+     * <p>
+     * This method performs property variable substitution on the
+     * specified value. If the specified value contains the syntax
+     * {@code ${&lt;prop-name&gt;}}, where {@code &lt;prop-name&gt;}
+     * refers to either a configuration property or a system property,
+     * then the corresponding property value is substituted for the variable
+     * placeholder. Multiple variable placeholders may exist in the
+     * specified value as well as nested variable placeholders, which
+     * are substituted from inner most to outer most. Configuration
+     * properties override system properties.
+     * </p>
+     *
+     * @param val The string on which to perform property substitution.
+     * @param currentKey The key of the property being evaluated used to
+     *        detect cycles.
+     * @param cycleMap Map of variable references used to detect nested cycles.
+     * @param configProps Set of configuration properties.
+     * @return The value of the specified string after system property 
substitution.
+     * @throws IllegalArgumentException If there was a syntax error in the
+     *         property placeholder syntax or a recursive variable reference.
+     **/
+    public static String substVars(
+            String val, String currentKey, Map<String, String> cycleMap, 
Map<String, String> configProps)
+            throws IllegalArgumentException {
+        return substVars(val, currentKey, cycleMap, configProps, 
(SubstitutionCallback) null);
+    }
+
+    /**
+     * <p>
+     * This method performs property variable substitution on the
+     * specified value. If the specified value contains the syntax
+     * {@code ${&lt;prop-name&gt;}}, where {@code &lt;prop-name&gt;}
+     * refers to either a configuration property or a system property,
+     * then the corresponding property value is substituted for the variable
+     * placeholder. Multiple variable placeholders may exist in the
+     * specified value as well as nested variable placeholders, which
+     * are substituted from inner most to outer most. Configuration
+     * properties override system properties.
+     * </p>
+     *
+     * @param val The string on which to perform property substitution.
+     * @param currentKey The key of the property being evaluated used to
+     *        detect cycles.
+     * @param cycleMap Map of variable references used to detect nested cycles.
+     * @param configProps Set of configuration properties.
+     * @param callback the callback to obtain substitution values
+     * @return The value of the specified string after system property 
substitution.
+     * @throws IllegalArgumentException If there was a syntax error in the
+     *         property placeholder syntax or a recursive variable reference.
+     **/
+    public static String substVars(
+            String val,
+            String currentKey,
+            Map<String, String> cycleMap,
+            Map<String, String> configProps,
+            SubstitutionCallback callback)
+            throws IllegalArgumentException {

Review Comment:
   The throws in the signature is redundant for runtime exceptions and we have 
good Javadoc here.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: issues-unsubscr...@maven.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to