Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 10 additions & 13 deletions _test_yaml/test/src/build_config.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions analysis_options.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,5 @@ linter:
- unnecessary_breaks
- unnecessary_ignore
- use_full_hex_values_for_flutter_colors
- use_null_aware_elements
- use_string_buffers
15 changes: 7 additions & 8 deletions example/lib/example.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions json_serializable/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
## 6.9.6-wip

- Move `package:collection` to a dev dependency.
- Use new `null-aware element` feature in generated code.
- Require Dart 3.8

## 6.9.5
Expand Down
6 changes: 3 additions & 3 deletions json_serializable/lib/src/constants.dart
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@ const converterOrKeyInstructions = r'''
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/fromJson.html
https://pub.dev/documentation/json_annotation/latest/json_annotation/JsonKey/toJson.html''';

/// This package generates code that uses case statements, which were introduced
/// in Dart 3.0.
const supportedLanguageConstraint = '^3.0.0';
/// This package generates code that uses null-aware elements, which were
/// introduced in Dart 3.8.
const supportedLanguageConstraint = '^3.8.0';
8 changes: 3 additions & 5 deletions json_serializable/lib/src/encoder_helper.dart
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/dart/element/nullability_suffix.dart';
import 'package:source_helper/source_helper.dart';

import 'constants.dart';
import 'enum_utils.dart';
import 'helper_core.dart';
import 'type_helpers/generic_factory_helper.dart';
Expand Down Expand Up @@ -109,10 +108,9 @@ mixin EncodeHelper implements HelperCore {
final keyExpression = safeNameAccess(field);
final valueExpression = _serializeField(field, access);

final keyValuePair = _canWriteJsonWithoutNullCheck(field)
? '$keyExpression: $valueExpression'
: 'if ($valueExpression case final $generatedLocalVarName?) '
'$keyExpression: $generatedLocalVarName';
final maybeQuestion = _canWriteJsonWithoutNullCheck(field) ? '' : '?';

final keyValuePair = '$keyExpression: $maybeQuestion$valueExpression';
return ' $keyValuePair,\n';
}),
)
Expand Down
2 changes: 1 addition & 1 deletion json_serializable/test/annotation_version_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ void main() {

group('language version', () {
test('is less than required', () async {
const sdkLowerBound = '2.12.0';
const sdkLowerBound = '3.7.0';
await _structurePackage(
environment: const {'sdk': '^$sdkLowerBound'},
dependencies: {'json_annotation': _annotationLowerBound},
Expand Down
31 changes: 12 additions & 19 deletions json_serializable/test/integration/converter_examples.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions json_serializable/test/integration/json_enum_example.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions json_serializable/test/integration/json_test_example.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,7 @@ class NoDeserializeBadKey {
@ShouldGenerate(r'''
Map<String, dynamic> _$IncludeIfNullOverrideToJson(
IncludeIfNullOverride instance,
) => <String, dynamic>{
'number': instance.number,
if (instance.str case final value?) 'str': value,
};
) => <String, dynamic>{'number': instance.number, 'str': ?instance.str};
''')
@JsonSerializable(createFactory: false, includeIfNull: false)
class IncludeIfNullOverride {
Expand Down
6 changes: 2 additions & 4 deletions json_serializable/test/src/inheritance_test_input.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ SubType _$SubTypeFromJson(Map<String, dynamic> json) =>

Map<String, dynamic> _$SubTypeToJson(SubType instance) => <String, dynamic>{
'super-final-field': instance.superFinalField,
if (instance.superReadWriteField case final value?)
'superReadWriteField': value,
'superReadWriteField': ?instance.superReadWriteField,
'subTypeViaCtor': instance.subTypeViaCtor,
'subTypeReadWrite': instance.subTypeReadWrite,
};
Expand Down Expand Up @@ -51,8 +50,7 @@ Map<String, dynamic> _$SubTypeWithAnnotatedFieldOverrideExtendsToJson(
SubTypeWithAnnotatedFieldOverrideExtends instance,
) => <String, dynamic>{
'super-final-field': instance.superFinalField,
if (instance.superReadWriteField case final value?)
'superReadWriteField': value,
'superReadWriteField': ?instance.superReadWriteField,
'priceHalf': instance.priceHalf,
};
''')
Expand Down
4 changes: 1 addition & 3 deletions json_serializable/test/src/to_from_json_test_input.dart
Original file line number Diff line number Diff line change
Expand Up @@ -166,9 +166,7 @@ String? _toStringNullOnEmpty(String input) => input.isEmpty ? null : input;
@ShouldGenerate(r'''
Map<String, dynamic> _$ToJsonNullableFalseIncludeIfNullFalseToJson(
ToJsonNullableFalseIncludeIfNullFalse instance,
) => <String, dynamic>{
if (_toStringNullOnEmpty(instance.field) case final value?) 'field': value,
};
) => <String, dynamic>{'field': ?_toStringNullOnEmpty(instance.field)};
''')
@JsonSerializable(createFactory: false)
class ToJsonNullableFalseIncludeIfNullFalse {
Expand Down