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

commit 7563949f718d588d8c23d21a8296d4072bbc95b9
Author: Guillaume Nodet <[email protected]>
AuthorDate: Tue Jul 4 07:29:31 2023 +0200

    [MNG-7834] Fix NullPointerException in flatten-maven-plugin
---
 .../maven/model/DependencyManagementTest.java      | 18 ++++++++++++++++
 .../java/org/apache/maven/model/ModelTest.java     | 15 +++++++++++++
 src/mdo/model-v3.vm                                | 25 +++++++++++++++-------
 3 files changed, 50 insertions(+), 8 deletions(-)

diff --git 
a/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java
 
b/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java
index 497509656..b53bb4b5b 100644
--- 
a/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java
+++ 
b/maven-model/src/test/java/org/apache/maven/model/DependencyManagementTest.java
@@ -20,6 +20,7 @@ package org.apache.maven.model;
 
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -53,4 +54,21 @@ class DependencyManagementTest {
     void testToStringNullSafe() {
         assertNotNull(new DependencyManagement().toString());
     }
+
+    @Test
+    void testDependencies() {
+        DependencyManagement dm = new DependencyManagement();
+        Dependency d1 = new Dependency();
+        d1.setGroupId("myGroupId");
+        assertNotNull(dm.getDependencies());
+        assertEquals(0, dm.getDependencies().size());
+        dm.addDependency(d1);
+        assertNotNull(dm.getDependencies());
+        assertEquals(1, dm.getDependencies().size());
+        dm.getDependencies().get(0).setArtifactId("myArtifactId");
+        assertEquals("myArtifactId", 
dm.getDependencies().get(0).getArtifactId());
+        dm.setDependencies(null);
+        assertNotNull(dm.getDependencies());
+        assertEquals(0, dm.getDependencies().size());
+    }
 }
diff --git a/maven-model/src/test/java/org/apache/maven/model/ModelTest.java 
b/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
index c33d596ba..af42f80bb 100644
--- a/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
+++ b/maven-model/src/test/java/org/apache/maven/model/ModelTest.java
@@ -20,8 +20,10 @@ package org.apache.maven.model;
 
 import org.junit.jupiter.api.Test;
 
+import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 /**
@@ -36,6 +38,19 @@ class ModelTest {
         new Model().hashCode();
     }
 
+    @Test
+    void testBuild() {
+        Model model = new Model();
+        Build build = new Build();
+        build.setOutputDirectory("myOutputDirectory");
+        model.setBuild(build);
+        Build build2 = model.getBuild();
+        assertNotNull(build2);
+        assertEquals("myOutputDirectory", build2.getOutputDirectory());
+        model.setBuild(null);
+        assertNull(model.getBuild());
+    }
+
     @Test
     void testEqualsNullSafe() {
         assertFalse(new Model().equals(null));
diff --git a/src/mdo/model-v3.vm b/src/mdo/model-v3.vm
index 5508c618f..30bdf24a8 100644
--- a/src/mdo/model-v3.vm
+++ b/src/mdo/model-v3.vm
@@ -201,18 +201,27 @@ public class ${class.name}
         if (!Objects.equals(map, getDelegate().get${cap}())) {
             update(getDelegate().with${cap}(map));
         }
-      #else
+      #elseif ( $field.to != "String" && $field.type == "java.util.List" && 
$field.multiplicity == "*" )
+        if (${field.name} == null) {
+            ${field.name} = Collections.emptyList();
+        }
         if (!Objects.equals(${field.name}, ${pfx}${cap}())) {
-        #if ( $field.to != "String" && $field.type == "java.util.List" && 
$field.multiplicity == "*" )
             update(getDelegate().with${cap}(
-                   ${field.name}.stream().map(c -> 
c.getDelegate()).collect(Collectors.toList())));
+                ${field.name}.stream().map(c -> 
c.getDelegate()).collect(Collectors.toList())));
             ${field.name}.forEach(e -> e.childrenTracking = this::replace);
-        #elseif ( $field.to && $field.to != "String" )
-            update(getDelegate().with${cap}(${field.name}.getDelegate()));
-            ${field.name}.childrenTracking = this::replace;
-        #else
+        }
+      #elseif ( $field.to && $field.to != "String" )
+        if (!Objects.equals(${field.name}, ${pfx}${cap}())){
+            if (${field.name} != null) {
+                update(getDelegate().with${cap}(${field.name}.getDelegate()));
+                ${field.name}.childrenTracking = this::replace;
+            } else {
+                update(getDelegate().with${cap}(null));
+            }
+        }
+      #else
+        if (!Objects.equals(${field.name}, ${pfx}${cap}())) {
             update(getDelegate().with${cap}(${field.name}));
-        #end
         }
       #end
     }

Reply via email to