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));
}