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 }
