Skip to content

Commit

Permalink
Remove support for generating legacy code.
Browse files Browse the repository at this point in the history
  • Loading branch information
davidmorgan committed Dec 8, 2023
1 parent 9ec8b52 commit 7883690
Show file tree
Hide file tree
Showing 17 changed files with 52 additions and 134 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
# Changelog

# 8.8.1 (unreleased)

- Remove support for generating legacy (not null safe) code.

# 8.8.0

- Allow classes with record fields to be serialized if they use a typedef for
Expand Down
4 changes: 2 additions & 2 deletions benchmark/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ description: >
homepage: https://github.com/google/built_value.dart

environment:
sdk: '>=2.12.0 <4.0.0'
sdk: '>=3.0.0 <4.0.0'

dependencies:
built_collection: ^5.0.0
built_value: ^8.7.0
built_value: ^8.8.0

dev_dependencies:
build_runner: '>=1.0.0 <3.0.0'
Expand Down
2 changes: 1 addition & 1 deletion built_value/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ topics:
- built-value

environment:
sdk: '>=2.12.0 <4.0.0'
sdk: '>=3.0.0 <4.0.0'

dependencies:
built_collection: ^5.0.0
Expand Down
33 changes: 12 additions & 21 deletions built_value_generator/lib/src/serializer_source_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -78,15 +78,6 @@ abstract class SerializerSourceClass
@memoized
String get name => element.name;

@memoized
bool get isNonNullByDefault => element.library.isNonNullableByDefault;

@memoized
String get orNull => isNonNullByDefault ? '?' : '';

@memoized
String get notNull => isNonNullByDefault ? '!' : '';

@memoized
String get wireName {
if (isBuiltValue) {
Expand Down Expand Up @@ -133,7 +124,7 @@ abstract class SerializerSourceClass
? ''
: '<' +
genericBounds
.map((bound) => bound.isEmpty ? 'Object$orNull' : bound)
.map((bound) => bound.isEmpty ? 'Object?' : bound)
.join(', ') +
'>';

Expand Down Expand Up @@ -328,18 +319,18 @@ class $serializerImplName implements StructuredSerializer<$genericName> {
final String wireName = '${escapeString(wireName)}';
@override
Iterable<Object$orNull> serialize(Serializers serializers, $genericName object,
Iterable<Object?> serialize(Serializers serializers, $genericName object,
{FullType specifiedType = FullType.unspecified}) {
${fields.isEmpty ? 'return <Object$orNull>[];' : '''
${fields.isEmpty ? 'return <Object?>[];' : '''
${_generateGenericsSerializerPreamble()}
final result = <Object$orNull>[${_generateRequiredFieldSerializers()}];
final result = <Object?>[${_generateRequiredFieldSerializers()}];
${_generateNullableFieldSerializers()}
return result;
'''}
}
@override
$genericName deserialize(Serializers serializers, Iterable<Object$orNull> serialized,
$genericName deserialize(Serializers serializers, Iterable<Object?> serialized,
{FullType specifiedType = FullType.unspecified}) {
${_generateGenericsSerializerPreamble()}
$maybeCastFn
Expand All @@ -348,9 +339,9 @@ class $serializerImplName implements StructuredSerializer<$genericName> {
final iterator = serialized.iterator;
while (iterator.moveNext()) {
final key = iterator.current$notNull as String;
final key = iterator.current! as String;
iterator.moveNext();
final Object$orNull value = iterator.current;
final Object? value = iterator.current;
switch (key) {
${_generateFieldDeserializers()}
}
Expand Down Expand Up @@ -490,7 +481,7 @@ class $serializerImplName implements PrimitiveSerializer<$genericName> {
var nullableFields = fields.where((field) => field.isNullable).toList();
if (nullableFields.isEmpty) return '';

return 'Object$orNull value;' +
return 'Object? value;' +
nullableFields.map((field) {
var serializeField = '''serializers.serialize(
value,
Expand Down Expand Up @@ -526,7 +517,7 @@ class $serializerImplName implements PrimitiveSerializer<$genericName> {
compilationUnit, genericParameters.toBuiltSet());
final cast = field.generateCast(compilationUnit, _genericBoundsAsMap);
// If cast exists and is not nullable.
var maybeNotNull = !field.isNullable && cast.isNotEmpty ? notNull : '';
var maybeNotNull = !field.isNullable && cast.isNotEmpty ? '!' : '';
if (field.builderFieldUsesNestedBuilder) {
if (hasBuilder && field.builderFieldIsNullable) {
// The manually implemented builder might or might not return a
Expand All @@ -536,7 +527,7 @@ class $serializerImplName implements PrimitiveSerializer<$genericName> {
case '${escapeString(field.wireName)}':
var maybeBuilder = result.${field.name};
var fieldValue = serializers.deserialize(
value, specifiedType: $fullType)$notNull $cast;
value, specifiedType: $fullType)! $cast;
if (maybeBuilder == null) {
result.${field.name} = \$cast(fieldValue.toBuilder());
} else {
Expand All @@ -552,7 +543,7 @@ case '${escapeString(field.wireName)}':
return '''
case '${escapeString(field.wireName)}':
result.${field.name}.replace(serializers.deserialize(
value, specifiedType: $fullType)$notNull $looseCast);
value, specifiedType: $fullType)! $looseCast);
break;
''';
} else {
Expand All @@ -565,7 +556,7 @@ case '${escapeString(field.wireName)}':
}
} else {
// `cast` is empty if no cast is needed.
var maybeOrNull = field.isNullable && cast.isNotEmpty ? orNull : '';
var maybeOrNull = field.isNullable && cast.isNotEmpty ? '?' : '';
return '''
case '${escapeString(field.wireName)}':
result.${field.name} = serializers.deserialize(
Expand Down
13 changes: 0 additions & 13 deletions built_value_generator/lib/src/serializer_source_class.g.dart

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

9 changes: 1 addition & 8 deletions built_value_generator/lib/src/serializer_source_field.dart
Original file line number Diff line number Diff line change
Expand Up @@ -73,12 +73,6 @@ abstract class SerializerSourceField
annotation.getField('autoCreateNestedBuilder')?.toBoolValue());
}

@memoized
bool get isNonNullByDefault => element.library.isNonNullableByDefault;

@memoized
String get orNull => isNonNullByDefault ? '?' : '';

@memoized
bool get hasNullableAnnotation => element.getter!.metadata
.any((metadata) => metadataToStringValue(metadata) == 'nullable');
Expand Down Expand Up @@ -168,7 +162,6 @@ abstract class SerializerSourceField

@memoized
bool get builderFieldIsNullable {
if (!isNonNullByDefault) return true;
if (!builderFieldElementIsValid) return true;

return fullBuildElementType == 'dynamic' ||
Expand Down Expand Up @@ -288,7 +281,7 @@ abstract class SerializerSourceField
DartTypes.isBuiltCollectionTypeName(bareType) &&
builderFieldUsesNestedBuilder) {
if (bareType == 'BuiltList' || bareType == 'BuiltSet') {
generics = 'Object$orNull';
generics = 'Object?';
} else if (bareType == 'BuiltMap' ||
bareType == 'BuiltListMultimap' ||
bareType == 'BuiltSetMultimap') {
Expand Down
9 changes: 0 additions & 9 deletions built_value_generator/lib/src/serializer_source_field.g.dart

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

52 changes: 18 additions & 34 deletions built_value_generator/lib/src/value_source_class.dart
Original file line number Diff line number Diff line change
Expand Up @@ -52,18 +52,6 @@ abstract class ValueSourceClass
? 'mixin class'
: 'class';

@memoized
bool get isNonNullByDefault => element.library.isNonNullableByDefault;

@memoized
String get orNull => isNonNullByDefault ? '?' : '';

@memoized
String get notNull => isNonNullByDefault ? '!' : '';

@memoized
String get late => isNonNullByDefault ? 'late ' : '';

/// Returns the class name for the generated implementation. If the manually
/// maintained class is private then we ignore the underscore here, to avoid
/// returning a class name starting `_$_`.
Expand Down Expand Up @@ -623,7 +611,7 @@ abstract class ValueSourceClass
if (!valueClassFactories.any(
(factory) => factory.toSource().contains('$implName$_generics'))) {
final exampleFactory = 'factory $name('
'[void Function(${name}Builder$_generics)$orNull updates]) = '
'[void Function(${name}Builder$_generics)? updates]) = '
'$implName$_generics;';
result.add(GeneratorError((b) => b
..message =
Expand Down Expand Up @@ -757,12 +745,11 @@ abstract class ValueSourceClass
for (var field in fields) {
final type = field.typeInCompilationUnit(compilationUnit);
result.writeln('@override');
result.writeln(
'final $type${field.isNullable ? orNull : ''} ${field.name};');
result
.writeln('final $type${field.isNullable ? '?' : ''} ${field.name};');
}
for (var memoizedGetter in memoizedGetters) {
result.writeln(
'${memoizedGetter.returnType}$orNull __${memoizedGetter.name};');
result.writeln('${memoizedGetter.returnType}? __${memoizedGetter.name};');
if (memoizedGetter.isNullable) {
// Nullable memoiozed getters needs a field to store whether they are
// initialized.
Expand All @@ -777,12 +764,12 @@ abstract class ValueSourceClass
// to cast.
if (hasBuilder) {
result.writeln('factory $implName(['
'void Function(${name}Builder$_generics)$orNull updates]) '
'void Function(${name}Builder$_generics)? updates]) '
'=> (new ${name}Builder$_generics()..update(updates)).build()'
' as $implName$_generics;');
} else {
result.writeln('factory $implName(['
'void Function(${name}Builder$_generics)$orNull updates]) '
'void Function(${name}Builder$_generics)? updates]) '
'=> (new ${name}Builder$_generics()..update(updates))._build();');
}

Expand All @@ -793,8 +780,7 @@ abstract class ValueSourceClass
} else {
result.write('$implName._({');
result.write(fields.map((field) {
var maybeRequired =
(isNonNullByDefault && !field.isNullable) ? 'required ' : '';
var maybeRequired = field.isNullable ? '' : 'required ';
return '${maybeRequired}this.${field.name}';
}).join(', '));
result.write('}) : super._()');
Expand Down Expand Up @@ -901,7 +887,7 @@ abstract class ValueSourceClass
}

// Builder holds a reference to a value, copies from it lazily.
result.writeln('$implName$_generics$orNull _\$v;');
result.writeln('$implName$_generics? _\$v;');
result.writeln('');

for (var field in fields) {
Expand All @@ -919,18 +905,16 @@ abstract class ValueSourceClass

final isNullableNestedBuilder = field.isAutoCreateNestedBuilder &&
field.isNestedBuilder &&
(!hasBuilder ||
field.builderElementSetterIsNullable ||
!isNonNullByDefault);
(!hasBuilder || field.builderElementSetterIsNullable);
final hasNullableSetter = !hasBuilder ||
isNullableNestedBuilder ||
field.builderElementSetterIsNullable;
final getterMaybeOrNull = hasNullableSetter &&
(!field.isNestedBuilder || !field.isAutoCreateNestedBuilder)
? orNull
? '?'
: '';
final setterMaybeOrNull = hasNullableSetter ? orNull : '';
final maybeLate = !hasNullableSetter ? late : '';
final setterMaybeOrNull = hasNullableSetter ? '?' : '';
final maybeLate = !hasNullableSetter ? 'late ' : '';

late String trackedVariable;

Expand Down Expand Up @@ -1053,7 +1037,7 @@ abstract class ValueSourceClass

result.writeln('@override');
result.writeln(
'void update(void Function(${name}Builder$_generics)$orNull updates) {'
'void update(void Function(${name}Builder$_generics)? updates) {'
' if (updates != null) updates(this); }');
result.writeln();

Expand Down Expand Up @@ -1138,7 +1122,7 @@ abstract class ValueSourceClass
// in a nested builder then throw with more information. Otherwise,
// just rethrow.
result.writeln('} catch (_) {');
result.writeln('${late}String _\$failedField;');
result.writeln('late String _\$failedField;');
result.writeln('try {');
result.write(fieldBuilders.keys.map((field) {
final fieldBuilder = fieldBuilders[field];
Expand Down Expand Up @@ -1202,7 +1186,7 @@ abstract class ValueSourceClass
var generateMemoizedHashCode =
declaresMemoizedHashCode && comparedFields.isNotEmpty;
if (generateMemoizedHashCode) {
result.writeln('int$orNull __hashCode;');
result.writeln('int? __hashCode;');
}

result.writeln('@override');
Expand All @@ -1212,7 +1196,7 @@ abstract class ValueSourceClass
result.writeln('return ${name.hashCode};');
} else {
if (generateMemoizedHashCode) {
result.writeln('if (__hashCode != null) return __hashCode$notNull;');
result.writeln('if (__hashCode != null) return __hashCode!;');
}

// Use a different seed for builders than for values, so they do not have
Expand Down Expand Up @@ -1274,12 +1258,12 @@ abstract class ValueSourceClass

final autoCreatedNestedBuilder =
field.isNestedBuilder && settings.autoCreateNestedBuilders;
final maybeOrNull = autoCreatedNestedBuilder ? '' : orNull;
final maybeOrNull = autoCreatedNestedBuilder ? '' : '?';

result.writeln('$type$maybeOrNull get $name;');
// Add `covariant` if we're implementing one or more parent builders.
result.writeln('set $name(${interfaces.isEmpty ? '' : 'covariant '} '
'$type$orNull $name);');
'$type? $name);');

result.writeln();
}
Expand Down

0 comments on commit 7883690

Please sign in to comment.