You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by gn...@apache.org on 2022/01/21 16:06:40 UTC

[maven] branch master updated: [MNG-7386] Make sure the ModelMerger$MergingList can be serialized

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


The following commit(s) were added to refs/heads/master by this push:
     new dbfe809  [MNG-7386] Make sure the ModelMerger$MergingList can be serialized
dbfe809 is described below

commit dbfe8097d229083919c53fd29b0fe4b7b92cb8e0
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Fri Jan 21 16:53:03 2022 +0100

    [MNG-7386] Make sure the ModelMerger$MergingList can be serialized
---
 .../org/apache/maven/model/merge/ModelMerger.java   |  9 ++++++++-
 .../apache/maven/model/merge/ModelMergerTest.java   | 21 +++++++++++++++++++++
 2 files changed, 29 insertions(+), 1 deletion(-)

diff --git a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
index 5d9c265..2ac6fbf 100644
--- a/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
+++ b/maven-model/src/main/java/org/apache/maven/model/merge/ModelMerger.java
@@ -19,6 +19,7 @@ package org.apache.maven.model.merge;
  * under the License.
  */
 
+import java.io.ObjectStreamException;
 import java.util.AbstractList;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -2681,8 +2682,9 @@ public class ModelMerger
      * Merging list
      * @param <V>
      */
-    private static class MergingList<V> extends AbstractList<V>
+    private static class MergingList<V> extends AbstractList<V> implements java.io.Serializable
     {
+
         private final KeyComputer<V> keyComputer;
         private Map<Object, V> map;
         private List<V> list;
@@ -2693,6 +2695,11 @@ public class ModelMerger
             this.keyComputer = keyComputer;
         }
 
+        Object writeReplace() throws ObjectStreamException
+        {
+            return new ArrayList<>( this );
+        }
+
         @Override
         public Iterator<V> iterator()
         {
diff --git a/maven-model/src/test/java/org/apache/maven/model/merge/ModelMergerTest.java b/maven-model/src/test/java/org/apache/maven/model/merge/ModelMergerTest.java
index 104b977..f1aad04 100644
--- a/maven-model/src/test/java/org/apache/maven/model/merge/ModelMergerTest.java
+++ b/maven-model/src/test/java/org/apache/maven/model/merge/ModelMergerTest.java
@@ -23,12 +23,16 @@ import static org.hamcrest.Matchers.is;
  * under the License.
  */
 
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectOutputStream;
+import java.util.ArrayList;
 import java.util.Arrays;
 
 import org.apache.maven.model.Build;
 import org.apache.maven.model.Contributor;
 import org.apache.maven.model.Dependency;
 import org.apache.maven.model.Developer;
+import org.apache.maven.model.License;
 import org.apache.maven.model.MailingList;
 import org.apache.maven.model.Model;
 import org.apache.maven.model.PatternSet;
@@ -426,4 +430,21 @@ public class ModelMergerTest
         assertThat( target.getVersion(), is( "TARGET" ) );
     }
 
+    @Test
+    public void testMergedModelSerialization() throws Exception {
+        Model target = new Model();
+        Model source = new Model();
+        target.setLicenses(new ArrayList<License>());
+        License lic1 = new License();
+        License lic2 = new License();
+        target.getLicenses().add(lic1);
+        source.setLicenses(new ArrayList<License>());
+        source.getLicenses().add(lic2);
+
+        new ModelMerger().mergeModel(target, source, false, null);
+
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream oos = new ObjectOutputStream(baos);
+        oos.writeObject(target);
+    }
 }