Skip to content

Commit 7d8d510

Browse files
authored
Fix bug running code generation for classes inheriting from ListBase (#1514)
* Add regression test for #1512
1 parent 4c9e1e6 commit 7d8d510

File tree

5 files changed

+88
-2
lines changed

5 files changed

+88
-2
lines changed

json_serializable/lib/src/field_helpers.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ class _FieldSet implements Comparable<_FieldSet> {
5858
/// preference for the getter if it's defined.
5959
int offsetFor(FieldElement2 e) {
6060
if (e.isSynthetic) {
61-
return (e.getter2 ?? e.setter2)!.firstFragment.nameOffset2!;
61+
return (e.getter2 ?? e.setter2)!.firstFragment.nameOffset2 ?? 0;
6262
}
63-
return e.firstFragment.nameOffset2!;
63+
return e.firstFragment.nameOffset2 ?? 0;
6464
}
6565

6666
return offsetFor(a).compareTo(offsetFor(b));

json_serializable/test/integration/json_test_example.dart

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,3 +266,34 @@ class RegressionTestIssue1210 with RegressionTestIssue1210Mixin {
266266

267267
Map<String, dynamic> toJson() => _$RegressionTestIssue1210ToJson(this);
268268
}
269+
270+
@JsonSerializable()
271+
class CustomList extends ListBase<String> {
272+
// Regression test for issue:
273+
// https://github.com/google/json_serializable.dart/issues/1512
274+
275+
final List<String> _innerList = [];
276+
277+
CustomList();
278+
279+
@override
280+
int get length => _innerList.length;
281+
282+
@override
283+
set length(int newLength) {
284+
_innerList.length = newLength;
285+
}
286+
287+
@override
288+
String operator [](int index) => _innerList[index];
289+
290+
@override
291+
void operator []=(int index, String value) {
292+
_innerList[index] = value;
293+
}
294+
295+
factory CustomList.fromJson(Map<String, dynamic> json) =>
296+
_$CustomListFromJson(json);
297+
298+
Map<String, dynamic> toJson() => _$CustomListToJson(this);
299+
}

json_serializable/test/integration/json_test_example.g.dart

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

json_serializable/test/integration/json_test_example.g_any_map.dart

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,3 +266,34 @@ class RegressionTestIssue1210 with RegressionTestIssue1210Mixin {
266266

267267
Map<String, dynamic> toJson() => _$RegressionTestIssue1210ToJson(this);
268268
}
269+
270+
@JsonSerializable(anyMap: true)
271+
class CustomList extends ListBase<String> {
272+
// Regression test for issue:
273+
// https://github.com/google/json_serializable.dart/issues/1512
274+
275+
final List<String> _innerList = [];
276+
277+
CustomList();
278+
279+
@override
280+
int get length => _innerList.length;
281+
282+
@override
283+
set length(int newLength) {
284+
_innerList.length = newLength;
285+
}
286+
287+
@override
288+
String operator [](int index) => _innerList[index];
289+
290+
@override
291+
void operator []=(int index, String value) {
292+
_innerList[index] = value;
293+
}
294+
295+
factory CustomList.fromJson(Map<String, dynamic> json) =>
296+
_$CustomListFromJson(json);
297+
298+
Map<String, dynamic> toJson() => _$CustomListToJson(this);
299+
}

json_serializable/test/integration/json_test_example.g_any_map.g.dart

Lines changed: 12 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)