@@ -147,8 +147,8 @@ class JsonSerializableGenerator
147
147
return buffer.toString ();
148
148
}
149
149
150
- void _writeToJsonWithNullChecks (
151
- StringBuffer buffer, Iterable <FieldElement > fields, bool includeIfNull ) {
150
+ void _writeToJsonWithNullChecks (StringBuffer buffer,
151
+ Iterable <FieldElement > fields, bool classIncludeIfNull ) {
152
152
buffer.writeln ('{' );
153
153
154
154
buffer.writeln ('var $toJsonMapVarName = <String, dynamic>{' );
@@ -160,48 +160,42 @@ class JsonSerializableGenerator
160
160
var directWrite = true ;
161
161
162
162
for (var field in fields) {
163
- var fieldName = field.name;
164
- try {
165
- var safeJsonKeyString = _safeNameAccess (field);
166
-
167
- // If `fieldName` collides with one of the local helpers, prefix
168
- // access with `this.`.
169
- if (fieldName == toJsonMapVarName || fieldName == toJsonMapHelperName) {
170
- fieldName = 'this.$fieldName ' ;
171
- }
163
+ var safeFieldAccess = field.name;
164
+ var safeJsonKeyString = _safeNameAccess (field);
165
+
166
+ // If `fieldName` collides with one of the local helpers, prefix
167
+ // access with `this.`.
168
+ if (safeFieldAccess == toJsonMapVarName ||
169
+ safeFieldAccess == toJsonMapHelperName) {
170
+ safeFieldAccess = 'this.$safeFieldAccess ' ;
171
+ }
172
172
173
- if (_includeIfNull (field, includeIfNull)) {
174
- if (directWrite) {
175
- buffer.writeln ('$safeJsonKeyString : '
176
- '${_serialize (field .type , fieldName , _nullable (field ))},' );
177
- } else {
178
- buffer.writeln ('$toJsonMapVarName [$safeJsonKeyString ] = '
179
- '${_serialize (field .type , fieldName , _nullable (field ))};' );
180
- }
173
+ if (_includeIfNull (field, classIncludeIfNull)) {
174
+ if (directWrite) {
175
+ buffer.writeln ('$safeJsonKeyString : '
176
+ '${_serializeField (field , accessOverride : safeFieldAccess )},' );
181
177
} else {
182
- if (directWrite) {
183
- // close the still-open map literal
184
- buffer.writeln ('};' );
185
- buffer.writeln ();
186
-
187
- // write the helper to be used by all following null-excluding
188
- // fields
189
- buffer.writeln ('''
178
+ buffer.writeln ('$toJsonMapVarName [$safeJsonKeyString ] = '
179
+ '${_serializeField (field , accessOverride : safeFieldAccess )};' );
180
+ }
181
+ } else {
182
+ if (directWrite) {
183
+ // close the still-open map literal
184
+ buffer.writeln ('};' );
185
+ buffer.writeln ();
186
+
187
+ // write the helper to be used by all following null-excluding
188
+ // fields
189
+ buffer.writeln ('''
190
190
void $toJsonMapHelperName (String key, dynamic value) {
191
191
if (value != null) {
192
192
$toJsonMapVarName [key] = value;
193
193
}
194
194
}''' );
195
- directWrite = false ;
196
- }
197
- buffer.writeln ('$toJsonMapHelperName ($safeJsonKeyString , '
198
- '${_serialize (field .type , fieldName , _nullable (field ))});' );
195
+ directWrite = false ;
199
196
}
200
- } on UnsupportedTypeError {
201
- throw new InvalidGenerationSourceError (
202
- 'Could not generate `toJson` code for `${friendlyNameForElement (
203
- field )}`.' ,
204
- todo: 'Make sure all of the types are serializable.' );
197
+ buffer.writeln ('$toJsonMapHelperName ($safeJsonKeyString , '
198
+ '${_serializeField (field , accessOverride : safeFieldAccess )});' );
205
199
}
206
200
}
207
201
@@ -215,14 +209,7 @@ void $toJsonMapHelperName(String key, dynamic value) {
215
209
216
210
var pairs = < String > [];
217
211
for (var field in fields) {
218
- try {
219
- pairs.add ('${_safeNameAccess (field )}: '
220
- '${_serialize (field .type , field .name , _nullable (field ))}' );
221
- } on UnsupportedTypeError {
222
- throw new InvalidGenerationSourceError (
223
- 'Could not generate `toJson` code for `${friendlyNameForElement (field )}`.' ,
224
- todo: 'Make sure all of the types are serializable.' );
225
- }
212
+ pairs.add ('${_safeNameAccess (field )}: ${_serializeField (field )}' );
226
213
}
227
214
buffer.writeAll (pairs, ',\n ' );
228
215
@@ -334,6 +321,18 @@ void $toJsonMapHelperName(String key, dynamic value) {
334
321
Iterable <TypeHelper > get _allHelpers =>
335
322
[_typeHelpers, _coreHelpers].expand ((e) => e);
336
323
324
+ String _serializeField (FieldElement field, {String accessOverride}) {
325
+ accessOverride ?? = field.name;
326
+ try {
327
+ return _serialize (field.type, accessOverride, _nullable (field));
328
+ } on UnsupportedTypeError {
329
+ throw new InvalidGenerationSourceError (
330
+ 'Could not generate `toJson` code for '
331
+ '`${friendlyNameForElement (field )}`.' ,
332
+ todo: 'Make sure all of the types are serializable.' );
333
+ }
334
+ }
335
+
337
336
/// [expression] may be just the name of the field or it may an expression
338
337
/// representing the serialization of a value.
339
338
String _serialize (DartType targetType, String expression, bool nullable) =>
0 commit comments