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

laeubi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/maven.git


The following commit(s) were added to refs/heads/master by this push:
     new a5faf4e9f9 Fix NullPointerException when clearing project properties
a5faf4e9f9 is described below

commit a5faf4e9f9e1fb635614d2c80ff2fb1334cf5a48
Author: copilot-swe-agent[bot] <[email protected]>
AuthorDate: Sun Dec 14 18:44:31 2025 +0000

    Fix NullPointerException when clearing project properties
    
    Fix #11552
---
 .../src/test/java/org/apache/maven/model/ModelTest.java     | 13 +++++++++++++
 src/mdo/java/WrapperProperties.java                         |  6 ++++++
 src/mdo/model-v3.vm                                         |  6 +++++-
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git 
a/compat/maven-model/src/test/java/org/apache/maven/model/ModelTest.java 
b/compat/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
index 2f872a7bf5..967af237c5 100644
--- a/compat/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
+++ b/compat/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
@@ -66,4 +66,17 @@ void testEqualsIdentity() {
     void testToStringNullSafe() {
         assertNotNull(new Model().toString());
     }
+
+    @Test
+    void testPropertiesClear() {
+        // Test for issue #11552: NullPointerException when clearing properties
+        Model model = new Model();
+        model.addProperty("key1", "value1");
+        model.addProperty("key2", "value2");
+        assertEquals(2, model.getProperties().size());
+
+        // This should not throw NullPointerException
+        model.getProperties().clear();
+        assertEquals(0, model.getProperties().size());
+    }
 }
diff --git a/src/mdo/java/WrapperProperties.java 
b/src/mdo/java/WrapperProperties.java
index 8c787507af..bb0e0b7f13 100644
--- a/src/mdo/java/WrapperProperties.java
+++ b/src/mdo/java/WrapperProperties.java
@@ -375,6 +375,12 @@ public synchronized Object remove(Object key) {
             return super.remove(key);
         }
 
+        @Override
+        public synchronized void clear() {
+            keyOrder.clear();
+            super.clear();
+        }
+
         @Override
         public synchronized void forEach(BiConsumer<? super Object, ? super 
Object> action) {
             entrySet().forEach(e -> action.accept(e.getKey(), e.getValue()));
diff --git a/src/mdo/model-v3.vm b/src/mdo/model-v3.vm
index a31196bf8c..851a74e085 100644
--- a/src/mdo/model-v3.vm
+++ b/src/mdo/model-v3.vm
@@ -204,7 +204,11 @@ public class ${class.name}
         }
       #elseif( $field.type == "java.util.Properties" )
         LinkedHashMap<String, String> map = new LinkedHashMap<>();
-        ${field.name}.forEach((key, value) -> map.put(key.toString(), 
value.toString()));
+        ${field.name}.forEach((key, value) -> {
+            if (value != null) {
+                map.put(key.toString(), value.toString());
+            }
+        });
         if (!Objects.equals(map, getDelegate().get${cap}())) {
             update(getDelegate().with${cap}(map));
         }

Reply via email to