@@ -124,20 +124,20 @@ class JsonSerializableGenerator
124
124
125
125
// write copies of the fields - this allows the toJson method to access
126
126
// the fields of the target class
127
- fields. forEach ((name, field) {
127
+ for ( var field in fields.values ) {
128
128
//TODO - handle aliased imports
129
- buffer.writeln (' ${field .type } get $name ;' );
130
- });
129
+ buffer.writeln (' ${field .type } get ${ field . name } ;' );
130
+ }
131
131
132
132
var includeIfNull = annotation.read ('includeIfNull' ).boolValue;
133
133
134
134
buffer.writeln (' Map<String, dynamic> toJson() ' );
135
135
if (fieldsList.every ((e) => _includeIfNull (e, includeIfNull))) {
136
136
// write simple `toJson` method that includes all keys...
137
- _writeToJsonSimple (buffer, fields);
137
+ _writeToJsonSimple (buffer, fields.values );
138
138
} else {
139
139
// At least one field should be excluded if null
140
- _writeToJsonWithNullChecks (buffer, fields, includeIfNull);
140
+ _writeToJsonWithNullChecks (buffer, fields.values , includeIfNull);
141
141
}
142
142
143
143
// end of the mixin class
@@ -147,8 +147,8 @@ class JsonSerializableGenerator
147
147
return buffer.toString ();
148
148
}
149
149
150
- void _writeToJsonWithNullChecks (StringBuffer buffer,
151
- Map < String , FieldElement > fields, bool includeIfNull) {
150
+ void _writeToJsonWithNullChecks (
151
+ StringBuffer buffer, Iterable < FieldElement > fields, bool includeIfNull) {
152
152
buffer.writeln ('{' );
153
153
154
154
buffer.writeln ('var $toJsonMapVarName = <String, dynamic>{' );
@@ -159,10 +159,10 @@ class JsonSerializableGenerator
159
159
// serialization.
160
160
var directWrite = true ;
161
161
162
- fields.forEach ((fieldName, field) {
162
+ for (var field in fields) {
163
+ var fieldName = field.name;
163
164
try {
164
- var safeJsonKeyString =
165
- _safeNameAccess (_fieldToJsonMapKey (field, fieldName));
165
+ var safeJsonKeyString = _safeNameAccess (field);
166
166
167
167
// If `fieldName` collides with one of the local helpers, prefix
168
168
// access with `this.`.
@@ -203,29 +203,28 @@ void $toJsonMapHelperName(String key, dynamic value) {
203
203
field )}`.' ,
204
204
todo: 'Make sure all of the types are serializable.' );
205
205
}
206
- });
206
+ }
207
207
208
208
buffer.writeln ('return $toJsonMapVarName ;' );
209
209
210
210
buffer.writeln ('}' );
211
211
}
212
212
213
- void _writeToJsonSimple (
214
- StringBuffer buffer, Map <String , FieldElement > fields) {
213
+ void _writeToJsonSimple (StringBuffer buffer, Iterable <FieldElement > fields) {
215
214
buffer.writeln ('=> <String, dynamic>{' );
216
215
217
216
var pairs = < String > [];
218
- fields. forEach ((fieldName, field) {
217
+ for ( var field in fields ) {
219
218
try {
220
- pairs.add (" '${_fieldToJsonMapKey (field , fieldName )}': "
221
- '${_serialize (field .type , fieldName , _nullable (field ))}' );
219
+ pairs.add ('${_safeNameAccess (field )}: '
220
+ '${_serialize (field .type , field . name , _nullable (field ))}' );
222
221
} on UnsupportedTypeError {
223
222
throw new InvalidGenerationSourceError (
224
223
'Could not generate `toJson` code for `${friendlyNameForElement (field )}`.' ,
225
224
todo: 'Make sure all of the types are serializable.' );
226
225
}
227
- });
228
- buffer.writeAll (pairs, ', ' );
226
+ }
227
+ buffer.writeAll (pairs, ',\n ' );
229
228
230
229
buffer.writeln (' };' );
231
230
}
@@ -303,7 +302,7 @@ void $toJsonMapHelperName(String key, dynamic value) {
303
302
buffer.write (' new $className (' );
304
303
buffer.writeAll (
305
304
ctorArguments.map ((paramElement) => _deserializeForField (
306
- paramElement.name, fields[paramElement.name],
305
+ fields[paramElement.name],
307
306
ctorParam: paramElement)),
308
307
', ' );
309
308
if (ctorArguments.isNotEmpty && ctorNamedArguments.isNotEmpty) {
@@ -312,19 +311,19 @@ void $toJsonMapHelperName(String key, dynamic value) {
312
311
buffer.writeAll (
313
312
ctorNamedArguments.map ((paramElement) =>
314
313
'${paramElement .name }: ' +
315
- _deserializeForField (paramElement.name, fields[paramElement.name],
314
+ _deserializeForField (fields[paramElement.name],
316
315
ctorParam: paramElement)),
317
316
', ' );
318
317
319
318
buffer.write (')' );
320
319
if (fieldsToSet.isEmpty) {
321
320
buffer.writeln (';' );
322
321
} else {
323
- fieldsToSet. forEach ((name, field) {
322
+ for ( var field in fieldsToSet.values ) {
324
323
buffer.writeln ();
325
- buffer.write (' ..${name } = ' );
326
- buffer.write (_deserializeForField (name, field));
327
- });
324
+ buffer.write (' ..${field . name } = ' );
325
+ buffer.write (_deserializeForField (field));
326
+ }
328
327
buffer.writeln (';' );
329
328
}
330
329
buffer.writeln ();
@@ -344,18 +343,18 @@ void $toJsonMapHelperName(String key, dynamic value) {
344
343
orElse: () =>
345
344
throw new UnsupportedTypeError (targetType, expression));
346
345
347
- String _deserializeForField (String name, FieldElement field,
346
+ String _deserializeForField (FieldElement field,
348
347
{ParameterElement ctorParam}) {
349
- name = _fieldToJsonMapKey (field, name );
348
+ var jsonKey = _safeNameAccess (field);
350
349
351
350
var targetType = ctorParam? .type ?? field.type;
352
351
353
352
try {
354
- var safeName = _safeNameAccess (name);
355
- return _deserialize (targetType, 'json[$safeName ]' , _nullable (field));
353
+ return _deserialize (targetType, 'json[$jsonKey ]' , _nullable (field));
356
354
} on UnsupportedTypeError {
357
355
throw new InvalidGenerationSourceError (
358
- 'Could not generate fromJson code for `${friendlyNameForElement (field )}`.' ,
356
+ 'Could not generate fromJson code for '
357
+ '`${friendlyNameForElement (field )}`.' ,
359
358
todo: 'Make sure all of the types are serializable.' );
360
359
}
361
360
}
@@ -369,14 +368,11 @@ void $toJsonMapHelperName(String key, dynamic value) {
369
368
throw new UnsupportedTypeError (targetType, expression));
370
369
}
371
370
372
- String _safeNameAccess (String name) =>
373
- name.contains (r'$' ) ? "r'$name '" : "'$name '" ;
374
-
375
- /// Returns the JSON map `key` to be used when (de)serializing [field] , if any.
376
- ///
377
- /// Otherwise, `null` ;
378
- String _fieldToJsonMapKey (FieldElement field, String ifNull) =>
379
- _jsonKeyFor (field).name ?? ifNull;
371
+ String _safeNameAccess (FieldElement field) {
372
+ var name = _jsonKeyFor (field).name ?? field.name;
373
+ // TODO(kevmoo): JsonKey.name could also have quotes and other silly.
374
+ return name.contains (r'$' ) ? "r'${name }'" : "'${name }'" ;
375
+ }
380
376
381
377
/// Returns `true` if the field should be treated as potentially nullable.
382
378
///
0 commit comments