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-filtering.git


The following commit(s) were added to refs/heads/master by this push:
     new ae1842f  [MSHARED-1050] Fix ConcurrentModificationException for 
maven-filtering (#98)
ae1842f is described below

commit ae1842fe4cac6b454510063a1103f83f8e7be185
Author: Guillaume Nodet <gno...@gmail.com>
AuthorDate: Sat Mar 2 09:48:02 2024 +0100

    [MSHARED-1050] Fix ConcurrentModificationException for maven-filtering (#98)
---
 .../apache/maven/shared/filtering/BaseFilter.java  | 27 ++++++++++++++--------
 1 file changed, 17 insertions(+), 10 deletions(-)

diff --git a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java 
b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
index 5660869..256c2c5 100644
--- a/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
+++ b/src/main/java/org/apache/maven/shared/filtering/BaseFilter.java
@@ -107,8 +107,8 @@ class BaseFilter implements DefaultFilterInfo {
         //
         if (request.getMavenSession() != null) {
             // User properties have precedence over system properties
-            baseProps.putAll(request.getMavenSession().getSystemProperties());
-            baseProps.putAll(request.getMavenSession().getUserProperties());
+            putAll(baseProps, request.getMavenSession().getSystemProperties());
+            putAll(baseProps, request.getMavenSession().getUserProperties());
         }
 
         // now we build properties to use for resources interpolation
@@ -119,8 +119,8 @@ class BaseFilter implements DefaultFilterInfo {
                 request.getMavenProject() != null ? 
request.getMavenProject().getBasedir() : new File(".");
 
         loadProperties(filterProperties, basedir, request.getFileFilters(), 
baseProps);
-        if (filterProperties.size() < 1) {
-            filterProperties.putAll(baseProps);
+        if (filterProperties.isEmpty()) {
+            putAll(filterProperties, baseProps);
         }
 
         if (request.getMavenProject() != null) {
@@ -144,13 +144,13 @@ class BaseFilter implements DefaultFilterInfo {
         }
         if (request.getMavenSession() != null) {
             // User properties have precedence over system properties
-            
filterProperties.putAll(request.getMavenSession().getSystemProperties());
-            
filterProperties.putAll(request.getMavenSession().getUserProperties());
+            putAll(filterProperties, 
request.getMavenSession().getSystemProperties());
+            putAll(filterProperties, 
request.getMavenSession().getUserProperties());
         }
 
         if (request.getAdditionalProperties() != null) {
             // additional properties wins
-            filterProperties.putAll(request.getAdditionalProperties());
+            putAll(filterProperties, request.getAdditionalProperties());
         }
 
         List<FilterWrapper> defaultFilterWrappers =
@@ -180,6 +180,13 @@ class BaseFilter implements DefaultFilterInfo {
         return defaultFilterWrappers;
     }
 
+    @SuppressWarnings("SynchronizationOnLocalVariableOrMethodParameter")
+    private static void putAll(Properties filterProperties, Properties 
request) {
+        synchronized (request) {
+            filterProperties.putAll(request);
+        }
+    }
+
     /**
      * default visibility only for testing reason !
      */
@@ -188,7 +195,7 @@ class BaseFilter implements DefaultFilterInfo {
             throws MavenFilteringException {
         if (propertiesFilePaths != null) {
             Properties workProperties = new Properties();
-            workProperties.putAll(baseProps);
+            putAll(workProperties, baseProps);
 
             for (String filterFile : propertiesFilePaths) {
                 if (filterFile == null || filterFile.trim().isEmpty()) {
@@ -198,8 +205,8 @@ class BaseFilter implements DefaultFilterInfo {
                 try {
                     File propFile = FilteringUtils.resolveFile(basedir, 
filterFile);
                     Properties properties = 
PropertyUtils.loadPropertyFile(propFile, workProperties, getLogger());
-                    filterProperties.putAll(properties);
-                    workProperties.putAll(properties);
+                    putAll(filterProperties, properties);
+                    putAll(workProperties, properties);
                 } catch (IOException e) {
                     throw new MavenFilteringException("Error loading property 
file '" + filterFile + "'", e);
                 }

Reply via email to