You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2021/10/12 11:20:55 UTC

[maven] 01/01: Fix MojoDescriptor

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch do-not-keep-parameters-map
in repository https://gitbox.apache.org/repos/asf/maven.git

commit 47c728c0234e6c70ba3582faf58c28a651f021f0
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue Oct 12 13:19:18 2021 +0200

    Fix MojoDescriptor
    
    It may lead to confusion as parameters (list) and
    parametersMap (map) may "fall apart" easily.
    
    Also, parametersMap did not honor parameter
    ordering while parameters list makes it look
    that order is important.
    
    Simply, rebuild the map always and retain
    ordering as well.
---
 .../maven/plugin/descriptor/MojoDescriptor.java      | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
index a15bdcf..f2f4348 100644
--- a/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
+++ b/maven-plugin-api/src/main/java/org/apache/maven/plugin/descriptor/MojoDescriptor.java
@@ -19,7 +19,7 @@ package org.apache.maven.plugin.descriptor;
  * under the License.
  */
 
-import java.util.HashMap;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -57,8 +57,6 @@ public class MojoDescriptor
 
     private List<Parameter> parameters;
 
-    private Map<String, Parameter> parameterMap;
-
     /** By default, the execution strategy is "once-per-session" */
     private String executionStrategy = SINGLE_PASS_EXEC_STRATEGY;
 
@@ -229,20 +227,18 @@ public class MojoDescriptor
     }
 
     /**
-     * @return the list parameters as a Map
+     * @return the list parameters as a Map that is built from {@link #parameters} list. Any change to this map is NOT
+     *         reflected on list and other way around!
      */
     public Map<String, Parameter> getParameterMap()
     {
-        if ( parameterMap == null )
-        {
-            parameterMap = new HashMap<>();
+        LinkedHashMap<String, Parameter> parameterMap = new LinkedHashMap<>();
 
-            if ( parameters != null )
+        if ( parameters != null )
+        {
+            for ( Parameter pd : parameters )
             {
-                for ( Parameter pd : parameters )
-                {
-                    parameterMap.put( pd.getName(), pd );
-                }
+                parameterMap.put( pd.getName(), pd );
             }
         }