From d6ea2d44b43f4a22c447d656cfb0529c74325b03 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Fri, 21 Oct 2022 20:24:35 +0200 Subject: [PATCH] Call setter with Collection argument only after Collection has been fully populated This closes #266 --- .../plugin/xpp3/Xpp3ReaderGenerator.java | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/modello-plugins/modello-plugin-xpp3/src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3ReaderGenerator.java b/modello-plugins/modello-plugin-xpp3/src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3ReaderGenerator.java index 867868173..a03aff191 100644 --- a/modello-plugins/modello-plugin-xpp3/src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3ReaderGenerator.java +++ b/modello-plugins/modello-plugin-xpp3/src/main/java/org/codehaus/modello/plugin/xpp3/Xpp3ReaderGenerator.java @@ -715,6 +715,8 @@ private void processField( ModelField field, XmlFieldMetadata xmlFieldMetadata, String adder; + boolean requireSetter = false; + if ( wrappedItems ) { sc.add( tagComparison ); @@ -735,7 +737,7 @@ private void processField( ModelField field, XmlFieldMetadata xmlFieldMetadata, } sc.add( associationType + " " + associationName + " = " + defaultValue + ";" ); - sc.add( objectName + ".set" + capFieldName + "( " + associationName + " );" ); + requireSetter = true; adder = associationName + ".add"; } @@ -789,8 +791,8 @@ private void processField( ModelField field, XmlFieldMetadata xmlFieldMetadata, sc.add( associationName + " = " + defaultValue + ";" ); - sc.add( objectName + ".set" + capFieldName + "( " + associationName + " );" ); - + requireSetter = true; + sc.unindent(); sc.add( "}" ); @@ -848,15 +850,14 @@ private void processField( ModelField field, XmlFieldMetadata xmlFieldMetadata, sc.unindent(); sc.add( "}" ); - - sc.unindent(); - sc.add( "}" ); } - else + if (requireSetter) { - sc.unindent(); - sc.add( "}" ); + sc.add( objectName + ".set" + capFieldName + "( " + associationName + " );" ); } + sc.unindent(); + sc.add( "}" ); + } else {