@@ -168,19 +168,57 @@ public void addFinalFieldAssignment(SourceBuilder code, String finalField, Strin
168
168
}
169
169
170
170
@ Override
171
- public void addMergeFromValue (SourceBuilder code , String value ) {
172
- code .addLine ("%s(%s.%s());" , setter (property ), value , property .getGetterName ());
171
+ public void addMergeFromValue (Block code , String value ) {
172
+ Excerpt defaults = Declarations .freshBuilder (code , metadata ).orNull ();
173
+ if (defaults != null ) {
174
+ code .add ("if (" );
175
+ if (!hasDefault ) {
176
+ code .add ("%s._unsetProperties.contains(%s.%s) || " ,
177
+ defaults , metadata .getPropertyEnum (), property .getAllCapsName ());
178
+ }
179
+ if (isPrimitive ) {
180
+ code .add ("%s.%s() != %s.%s()" ,
181
+ value , property .getGetterName (), defaults , getter (property ));
182
+ } else {
183
+ code .add ("!%s.%s().equals(%s.%s())" ,
184
+ value , property .getGetterName (), defaults , getter (property ));
185
+ }
186
+ code .add (") {%n" );
187
+ }
188
+ code .addLine (" %s(%s.%s());" , setter (property ), value , property .getGetterName ());
189
+ if (defaults != null ) {
190
+ code .addLine ("}" );
191
+ }
173
192
}
174
193
175
194
@ Override
176
195
public void addMergeFromBuilder (Block code , String builder ) {
177
- if (!hasDefault ) {
178
- Excerpt base = Declarations .upcastToGeneratedBuilder (code , metadata , builder );
196
+ Excerpt base =
197
+ hasDefault ? null : Declarations .upcastToGeneratedBuilder (code , metadata , builder );
198
+ Excerpt defaults = Declarations .freshBuilder (code , metadata ).orNull ();
199
+ if (defaults != null ) {
200
+ code .add ("if (" );
201
+ if (!hasDefault ) {
202
+ code .add ("!%s._unsetProperties.contains(%s.%s) && " ,
203
+ base , metadata .getPropertyEnum (), property .getAllCapsName ())
204
+ .add ("(%s._unsetProperties.contains(%s.%s) ||" ,
205
+ defaults , metadata .getPropertyEnum (), property .getAllCapsName ());
206
+ }
207
+ if (isPrimitive ) {
208
+ code .add ("%1$s.%2$s() != %3$s.%2$s()" , builder , getter (property ), defaults );
209
+ } else {
210
+ code .add ("!%1$s.%2$s().equals(%3$s.%2$s())" , builder , getter (property ), defaults );
211
+ }
212
+ if (!hasDefault ) {
213
+ code .add (")" );
214
+ }
215
+ code .add (") {%n" );
216
+ } else if (!hasDefault ) {
179
217
code .addLine ("if (!%s._unsetProperties.contains(%s.%s)) {" ,
180
218
base , metadata .getPropertyEnum (), property .getAllCapsName ());
181
219
}
182
220
code .addLine (" %s(%s.%s());" , setter (property ), builder , getter (property ));
183
- if (!hasDefault ) {
221
+ if (defaults != null || !hasDefault ) {
184
222
code .addLine ("}" );
185
223
}
186
224
}
0 commit comments