diff --git a/CHANGELOG.md b/CHANGELOG.md index a1608fea..8bbfdcd8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Changelog +# 9.0.0 + +- Tighten some types that were missing and inferred as `dynamic`. In particular, + `updates` are now `void Function` instead of `Function`, and builder factories + are now `Object Function()` instead of `Function`. +- Use `dart_flutter_team_lints` instead of `pedantic`, fix lint violations. + # 8.11.0 - Use `build ^3.0.0`. diff --git a/benchmark/analysis_options.yaml b/benchmark/analysis_options.yaml index 108d1058..d978f811 100644 --- a/benchmark/analysis_options.yaml +++ b/benchmark/analysis_options.yaml @@ -1 +1 @@ -include: package:pedantic/analysis_options.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml diff --git a/benchmark/lib/benchmark.dart b/benchmark/lib/benchmark.dart index b9256444..6dd2ea0e 100644 --- a/benchmark/lib/benchmark.dart +++ b/benchmark/lib/benchmark.dart @@ -2,8 +2,8 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -import 'package:benchmark/node.dart'; -import 'package:benchmark/simple_value.dart'; +import 'node.dart'; +import 'simple_value.dart'; void benchmark() { benchmarkHashCode(); @@ -11,9 +11,11 @@ void benchmark() { } void benchmarkHashCode() { - final value = SimpleValue((b) => b - ..anInt = 0 - ..aString = 'zero'); + final value = SimpleValue( + (b) => b + ..anInt = 0 + ..aString = 'zero', + ); _benchmark('hashCode', () => value.hashCode); } @@ -42,7 +44,7 @@ void _buildNested(NodeBuilder nodeBuilder, int depth) { } } -void _benchmark(String name, Function() function) { +void _benchmark(String name, void Function() function) { // Warm up. for (var i = 0; i != 1000; ++i) { function(); diff --git a/benchmark/lib/node.dart b/benchmark/lib/node.dart index 5de1590b..30352aa3 100644 --- a/benchmark/lib/node.dart +++ b/benchmark/lib/node.dart @@ -2,8 +2,6 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library node; - import 'package:built_value/built_value.dart'; part 'node.g.dart'; @@ -15,6 +13,6 @@ abstract class Node implements Built { Node? get right; - factory Node([Function(NodeBuilder) updates]) = _$Node; + factory Node([void Function(NodeBuilder) updates]) = _$Node; Node._(); } diff --git a/benchmark/lib/simple_value.dart b/benchmark/lib/simple_value.dart index a4e2dabd..8080fb5d 100644 --- a/benchmark/lib/simple_value.dart +++ b/benchmark/lib/simple_value.dart @@ -2,8 +2,6 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library simple_value; - import 'package:built_value/built_value.dart'; part 'simple_value.g.dart'; @@ -13,6 +11,7 @@ abstract class SimpleValue implements Built { String get aString; - factory SimpleValue([Function(SimpleValueBuilder) updates]) = _$SimpleValue; + factory SimpleValue([void Function(SimpleValueBuilder) updates]) = + _$SimpleValue; SimpleValue._(); } diff --git a/benchmark/pubspec.yaml b/benchmark/pubspec.yaml index 93b3467a..804f8fce 100644 --- a/benchmark/pubspec.yaml +++ b/benchmark/pubspec.yaml @@ -15,6 +15,12 @@ dependencies: dev_dependencies: build_runner: '>=1.0.0 <3.0.0' built_value_generator: ^8.11.0 - pedantic: ^1.4.0 + dart_flutter_team_lints: ^3.5.2 quiver: '>=0.21.0 <4.0.0' test: ^1.0.0 + +dependency_overrides: + built_value: + path: ../built_value + built_value_generator: + path: ../built_value_generator diff --git a/built_value/analysis_options.yaml b/built_value/analysis_options.yaml index 108d1058..c1c82305 100644 --- a/built_value/analysis_options.yaml +++ b/built_value/analysis_options.yaml @@ -1 +1,5 @@ -include: package:pedantic/analysis_options.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + errors: + avoid_catching_errors: ignore diff --git a/built_value/lib/async_serializer.dart b/built_value/lib/async_serializer.dart index 60d236b4..29c2b258 100644 --- a/built_value/lib/async_serializer.dart +++ b/built_value/lib/async_serializer.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -import 'package:built_value/serializer.dart'; +import 'serializer.dart'; /// Deserializer for `BuiltList` that runs asynchronously. /// diff --git a/built_value/lib/built_value.dart b/built_value/lib/built_value.dart index f702e003..9a2a8948 100644 --- a/built_value/lib/built_value.dart +++ b/built_value/lib/built_value.dart @@ -18,7 +18,7 @@ abstract class Built, B extends Builder> { /// /// The implementation of this method will be generated for you by the /// built_value generator. - V rebuild(Function(B) updates); + V rebuild(void Function(B) updates); /// Converts the instance to a builder [B]. /// @@ -43,7 +43,7 @@ abstract class Builder, B extends Builder> { /// Applies updates. /// /// [updates] is a function that takes a builder [B]. - void update(Function(B)? updates); + void update(void Function(B)? updates); /// Builds. /// @@ -117,15 +117,16 @@ class BuiltValue { /// to serialize with `@BuiltValueField(serialize: true)`. final bool defaultSerialize; - const BuiltValue( - {this.instantiable = true, - this.nestedBuilders = true, - this.autoCreateNestedBuilders = true, - this.comparableBuilders = false, - this.generateBuilderOnSetField = false, - this.wireName, - this.defaultCompare = true, - this.defaultSerialize = true}); + const BuiltValue({ + this.instantiable = true, + this.nestedBuilders = true, + this.autoCreateNestedBuilders = true, + this.comparableBuilders = false, + this.generateBuilderOnSetField = false, + this.wireName, + this.defaultCompare = true, + this.defaultSerialize = true, + }); } /// Annotation that was used to mark nullable Built Value fields. @@ -156,20 +157,23 @@ class BuiltValueField { /// indicates the name is to be taken from the literal field name. final String? wireName; - /// Whether the field overrides the `nestedBuilders` setting from the class. Defaults to `null` which - /// indicates the setting is to be taken from the `nestedBuilders` setting on the class. + /// Whether the field overrides the `nestedBuilders` setting from the class. + /// Defaults to `null` which indicates the setting is to be taken from the + /// `nestedBuilders` setting on the class. final bool? nestedBuilder; - /// Whether the field overrides the `autoCreateNestedBuilders` setting from the class. Defaults to `null` which - /// indicates the setting is to be taken from the `autoCreateNestedBuilders` setting on the class. + /// Whether the field overrides the `autoCreateNestedBuilders` setting from + /// the class. Defaults to `null` which indicates the setting is to be taken + /// from the `autoCreateNestedBuilders` setting on the class. final bool? autoCreateNestedBuilder; - const BuiltValueField( - {this.compare, - this.serialize, - this.wireName, - this.nestedBuilder, - this.autoCreateNestedBuilder}); + const BuiltValueField({ + this.compare, + this.serialize, + this.wireName, + this.nestedBuilder, + this.autoCreateNestedBuilder, + }); } /// Optionally, annotate a Built Value `Serializer` getters with this to @@ -187,8 +191,10 @@ class BuiltValueSerializer { final bool serializeNulls; - const BuiltValueSerializer( - {this.custom = false, this.serializeNulls = false}); + const BuiltValueSerializer({ + this.custom = false, + this.serializeNulls = false, + }); } /// Memoized annotation for Built Value getters. @@ -235,8 +241,11 @@ class BuiltValueEnumConst { /// the fallback, if available, rather than throwing an exception. final bool fallback; - const BuiltValueEnumConst( - {this.wireName, this.wireNumber, this.fallback = false}); + const BuiltValueEnumConst({ + this.wireName, + this.wireNumber, + this.fallback = false, + }); } /// Optionally, annotate methods with this to cause them to be called by @@ -275,8 +284,10 @@ class BuiltValueHook { /// ``` final bool finalizeBuilder; - const BuiltValueHook( - {this.initializeBuilder = false, this.finalizeBuilder = false}); + const BuiltValueHook({ + this.initializeBuilder = false, + this.finalizeBuilder = false, + }); } /// Enum Class base class. @@ -319,7 +330,7 @@ typedef BuiltValueToStringHelperProvider = BuiltValueToStringHelper Function( /// are [IndentingBuiltValueToStringHelper], which is the default, and /// [FlatBuiltValueToStringHelper]. BuiltValueToStringHelperProvider newBuiltValueToStringHelper = - (String className) => IndentingBuiltValueToStringHelper(className); + IndentingBuiltValueToStringHelper.new; /// Interface for built_value toString() output helpers. /// @@ -422,7 +433,8 @@ class BuiltValueNullFieldError extends Error { @override String toString() => - 'Tried to construct class "$type" with null for non-nullable field "$field".'; + 'Tried to construct class "$type" with null for non-nullable field ' + '"$field".'; } /// [Error] indicating that a built_value class constructor was called with diff --git a/built_value/lib/iso_8601_date_time_serializer.dart b/built_value/lib/iso_8601_date_time_serializer.dart index b2b1c6fd..42ad1e9e 100644 --- a/built_value/lib/iso_8601_date_time_serializer.dart +++ b/built_value/lib/iso_8601_date_time_serializer.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import 'serializer.dart'; /// Alternative serializer for [DateTime]. /// diff --git a/built_value/lib/iso_8601_duration_serializer.dart b/built_value/lib/iso_8601_duration_serializer.dart index e038eee8..f19cd943 100644 --- a/built_value/lib/iso_8601_duration_serializer.dart +++ b/built_value/lib/iso_8601_duration_serializer.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import 'serializer.dart'; /// Alternative serializer for [Duration]. /// diff --git a/built_value/lib/serializer.dart b/built_value/lib/serializer.dart index ff006f3c..27a31f2e 100644 --- a/built_value/lib/serializer.dart +++ b/built_value/lib/serializer.dart @@ -3,20 +3,10 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; +// ignore: implementation_imports import 'package:built_collection/src/internal/hash.dart'; -import 'package:built_value/src/big_int_serializer.dart'; -import 'package:built_value/src/date_time_serializer.dart'; -import 'package:built_value/src/duration_serializer.dart'; -import 'package:built_value/src/int32_serializer.dart'; -import 'package:built_value/src/int64_serializer.dart'; -import 'package:built_value/src/json_object_serializer.dart'; -import 'package:built_value/src/list_serializer.dart'; -import 'package:built_value/src/map_serializer.dart'; -import 'package:built_value/src/num_serializer.dart'; -import 'package:built_value/src/set_serializer.dart'; -import 'package:built_value/src/uint8_list_serializer.dart'; -import 'package:built_value/src/uri_serializer.dart'; +import 'src/big_int_serializer.dart'; import 'src/bool_serializer.dart'; import 'src/built_json_serializers.dart'; import 'src/built_list_multimap_serializer.dart'; @@ -24,11 +14,22 @@ import 'src/built_list_serializer.dart'; import 'src/built_map_serializer.dart'; import 'src/built_set_multimap_serializer.dart'; import 'src/built_set_serializer.dart'; +import 'src/date_time_serializer.dart'; import 'src/double_serializer.dart'; +import 'src/duration_serializer.dart'; +import 'src/int32_serializer.dart'; +import 'src/int64_serializer.dart'; import 'src/int_serializer.dart'; +import 'src/json_object_serializer.dart'; +import 'src/list_serializer.dart'; +import 'src/map_serializer.dart'; import 'src/null_serializer.dart'; +import 'src/num_serializer.dart'; import 'src/regexp_serializer.dart'; +import 'src/set_serializer.dart'; import 'src/string_serializer.dart'; +import 'src/uint8_list_serializer.dart'; +import 'src/uri_serializer.dart'; /// Annotation to trigger code generation of a [Serializers] instance. /// @@ -83,21 +84,32 @@ abstract class Serializers { ..add(StringSerializer()) ..add(Uint8ListSerializer()) ..add(UriSerializer()) - ..addBuilderFactory(const FullType(BuiltList, [FullType.object]), - () => ListBuilder()) ..addBuilderFactory( - const FullType( - BuiltListMultimap, [FullType.object, FullType.object]), - () => ListMultimapBuilder()) + const FullType(BuiltList, [FullType.object]), + ListBuilder.new, + ) ..addBuilderFactory( - const FullType(BuiltMap, [FullType.object, FullType.object]), - () => MapBuilder()) - ..addBuilderFactory(const FullType(BuiltSet, [FullType.object]), - () => SetBuilder()) + const FullType(BuiltListMultimap, [ + FullType.object, + FullType.object, + ]), + ListMultimapBuilder.new, + ) ..addBuilderFactory( - const FullType( - BuiltSetMultimap, [FullType.object, FullType.object]), - () => SetMultimapBuilder())) + const FullType(BuiltMap, [FullType.object, FullType.object]), + MapBuilder.new, + ) + ..addBuilderFactory( + const FullType(BuiltSet, [FullType.object]), + SetBuilder.new, + ) + ..addBuilderFactory( + const FullType(BuiltSetMultimap, [ + FullType.object, + FullType.object, + ]), + SetMultimapBuilder.new, + )) .build(); } @@ -111,7 +123,7 @@ abstract class Serializers { Iterable get serializers; /// The installed builder factories. - BuiltMap get builderFactories; + BuiltMap get builderFactories; /// The installed serializer plugins. Iterable get serializerPlugins; @@ -127,8 +139,10 @@ abstract class Serializers { /// Create one using [SerializersBuilder]. /// /// TODO(davidmorgan): document the wire format. - Object? serialize(Object? object, - {FullType specifiedType = FullType.unspecified}); + Object? serialize( + Object? object, { + FullType specifiedType = FullType.unspecified, + }); /// Convenience method for when you know the type you're serializing. /// Specify the type by specifying its [Serializer] class. Equivalent to @@ -147,8 +161,10 @@ abstract class Serializers { /// /// If [serialized] was produced by calling [serialize] with [specifiedType], /// the exact same [specifiedType] must be provided to deserialize. - Object? deserialize(Object? serialized, - {FullType specifiedType = FullType.unspecified}); + Object? deserialize( + Object? serialized, { + FullType specifiedType = FullType.unspecified, + }); /// Convenience method for when you know the type you're deserializing. /// Specify the type by specifying its [Serializer] class. Equivalent to @@ -235,7 +251,7 @@ abstract class SerializersBuilder { /// )) /// .build(); /// ``` - void addBuilderFactory(FullType specifiedType, Function function); + void addBuilderFactory(FullType specifiedType, Object Function() function); /// Installs a [SerializerPlugin] that applies to all serialization and /// deserialization. @@ -343,8 +359,11 @@ abstract class PrimitiveSerializer implements Serializer { /// an integer, a double, a String or a List. /// /// TODO(davidmorgan): document the wire format. - Object serialize(Serializers serializers, T object, - {FullType specifiedType = FullType.unspecified}); + Object serialize( + Serializers serializers, + T object, { + FullType specifiedType = FullType.unspecified, + }); /// Deserializes [serialized]. /// @@ -352,14 +371,17 @@ abstract class PrimitiveSerializer implements Serializer { /// /// Use [serializers] as needed for nested deserialization. Information about /// the type being deserialized is provided in [specifiedType]. - T deserialize(Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}); + T deserialize( + Serializers serializers, + Object serialized, { + FullType specifiedType = FullType.unspecified, + }); } /// A [Serializer] that serializes to and from an [Iterable] of primitive JSON /// values. abstract class StructuredSerializer implements Serializer { - /// Serializes [object]. + /// Serializes [map]. /// /// Use [serializers] as needed for nested serialization. Information about /// the type being serialized is provided in [specifiedType]. @@ -368,8 +390,11 @@ abstract class StructuredSerializer implements Serializer { /// JSON: booleans, integers, doubles, Strings and [Iterable]s. /// /// TODO(davidmorgan): document the wire format. - Iterable serialize(Serializers serializers, T object, - {FullType specifiedType = FullType.unspecified}); + Iterable serialize( + Serializers serializers, + T map, { + FullType specifiedType = FullType.unspecified, + }); /// Deserializes [serialized]. /// @@ -378,14 +403,17 @@ abstract class StructuredSerializer implements Serializer { /// /// Use [serializers] as needed for nested deserialization. Information about /// the type being deserialized is provided in [specifiedType]. - T deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}); + T deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }); } /// [Error] conveying why deserialization failed. /// -/// The Object that failed to deseralize is included as [json] but is not displayed -/// in the error message to prevent accidental inclusion in logs. +/// The Object that failed to deseralize is included as [json] but is not +/// displayed in the error message to prevent accidental inclusion in logs. class DeserializationError extends Error { final String? json; final FullType type; diff --git a/built_value/lib/src/big_int_serializer.dart b/built_value/lib/src/big_int_serializer.dart index 5afd747a..041f7f24 100644 --- a/built_value/lib/src/big_int_serializer.dart +++ b/built_value/lib/src/big_int_serializer.dart @@ -3,27 +3,36 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class BigIntSerializer implements PrimitiveSerializer { final bool structured = false; // [BigInt] has a private implementation type; register it via [BigInt.zero]. @override - final Iterable types = - BuiltList([BigInt, BigInt.zero.runtimeType]); + final Iterable types = BuiltList([ + BigInt, + BigInt.zero.runtimeType, + ]); @override final String wireName = 'BigInt'; @override - Object serialize(Serializers serializers, BigInt bigInt, - {FullType specifiedType = FullType.unspecified}) { + Object serialize( + Serializers serializers, + BigInt bigInt, { + FullType specifiedType = FullType.unspecified, + }) { return bigInt.toString(); } @override - BigInt deserialize(Serializers serializers, Object? serialized, - {FullType specifiedType = FullType.unspecified}) { + BigInt deserialize( + Serializers serializers, + Object? serialized, { + FullType specifiedType = FullType.unspecified, + }) { return BigInt.parse(serialized as String); } } diff --git a/built_value/lib/src/bool_serializer.dart b/built_value/lib/src/bool_serializer.dart index 0d83dff2..1dd4d4f8 100644 --- a/built_value/lib/src/bool_serializer.dart +++ b/built_value/lib/src/bool_serializer.dart @@ -3,7 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class BoolSerializer implements PrimitiveSerializer { final bool structured = false; @@ -13,14 +14,20 @@ class BoolSerializer implements PrimitiveSerializer { final String wireName = 'bool'; @override - Object serialize(Serializers serializers, bool boolean, - {FullType specifiedType = FullType.unspecified}) { + Object serialize( + Serializers serializers, + bool boolean, { + FullType specifiedType = FullType.unspecified, + }) { return boolean; } @override - bool deserialize(Serializers serializers, Object? serialized, - {FullType specifiedType = FullType.unspecified}) { + bool deserialize( + Serializers serializers, + Object? serialized, { + FullType specifiedType = FullType.unspecified, + }) { return serialized as bool; } } diff --git a/built_value/lib/src/built_json_serializers.dart b/built_value/lib/src/built_json_serializers.dart index 012af065..dd6cc081 100644 --- a/built_value/lib/src/built_json_serializers.dart +++ b/built_value/lib/src/built_json_serializers.dart @@ -5,7 +5,7 @@ import 'dart:convert'; import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import '../serializer.dart'; /// Default implementation of [Serializers]. class BuiltJsonSerializers implements Serializers { @@ -22,25 +22,28 @@ class BuiltJsonSerializers implements Serializers { final BuiltMap _typeNameToSerializer; @override - final BuiltMap builderFactories; + final BuiltMap builderFactories; @override final BuiltList serializerPlugins; BuiltJsonSerializers._( - this._typeToSerializer, - this._wireNameToSerializer, - this._typeNameToSerializer, - this.builderFactories, - this.serializerPlugins); + this._typeToSerializer, + this._wireNameToSerializer, + this._typeNameToSerializer, + this.builderFactories, + this.serializerPlugins, + ); @override Iterable get serializers => _wireNameToSerializer.values; @override T? deserializeWith(Serializer serializer, Object? serialized) { - return deserialize(serialized, - specifiedType: FullType(serializer.types.first)) as T?; + return deserialize( + serialized, + specifiedType: FullType(serializer.types.first), + ) as T?; } @override @@ -59,12 +62,16 @@ class BuiltJsonSerializers implements Serializers { } @override - Object? serialize(Object? object, - {FullType specifiedType = FullType.unspecified}) { + Object? serialize( + Object? object, { + FullType specifiedType = FullType.unspecified, + }) { var transformedObject = object; for (var plugin in serializerPlugins) { - transformedObject = - plugin.beforeSerialize(transformedObject, specifiedType); + transformedObject = plugin.beforeSerialize( + transformedObject, + specifiedType, + ); } var result = _serialize(transformedObject, specifiedType); for (var plugin in serializerPlugins) { @@ -78,7 +85,8 @@ class BuiltJsonSerializers implements Serializers { final serializer = serializerForType(object.runtimeType); if (serializer == null) { throw StateError( - _noSerializerMessageFor(object.runtimeType.toString())); + _noSerializerMessageFor(object.runtimeType.toString()), + ); } if (serializer is StructuredSerializer) { final result = [serializer.wireName]; @@ -89,7 +97,8 @@ class BuiltJsonSerializers implements Serializers { : [serializer.wireName, serializer.serialize(this, object)]; } else { throw StateError( - 'serializer must be StructuredSerializer or PrimitiveSerializer'); + 'serializer must be StructuredSerializer or PrimitiveSerializer', + ); } } else { final serializer = serializerForType(specifiedType.root); @@ -109,18 +118,23 @@ class BuiltJsonSerializers implements Serializers { : serializer.serialize(this, object, specifiedType: specifiedType); } else { throw StateError( - 'serializer must be StructuredSerializer or PrimitiveSerializer'); + 'serializer must be StructuredSerializer or PrimitiveSerializer', + ); } } } @override - Object? deserialize(Object? object, - {FullType specifiedType = FullType.unspecified}) { + Object? deserialize( + Object? object, { + FullType specifiedType = FullType.unspecified, + }) { var transformedObject = object; for (var plugin in serializerPlugins) { - transformedObject = - plugin.beforeDeserialize(transformedObject, specifiedType); + transformedObject = plugin.beforeDeserialize( + transformedObject, + specifiedType, + ); } var result = _deserialize(object, transformedObject, specifiedType); for (var plugin in serializerPlugins) { @@ -130,7 +144,10 @@ class BuiltJsonSerializers implements Serializers { } Object? _deserialize( - Object? objectBeforePlugins, Object? object, FullType specifiedType) { + Object? objectBeforePlugins, + Object? object, + FullType specifiedType, + ) { if (specifiedType.isUnspecified) { final wireName = (object as List).first as String; @@ -156,7 +173,8 @@ class BuiltJsonSerializers implements Serializers { } } else { throw StateError( - 'serializer must be StructuredSerializer or PrimitiveSerializer'); + 'serializer must be StructuredSerializer or PrimitiveSerializer', + ); } } else { final serializer = serializerForType(specifiedType.root); @@ -166,7 +184,8 @@ class BuiltJsonSerializers implements Serializers { return deserialize(objectBeforePlugins); } else { throw StateError( - _noSerializerMessageFor(specifiedType.root.toString())); + _noSerializerMessageFor(specifiedType.root.toString()), + ); } } @@ -174,8 +193,11 @@ class BuiltJsonSerializers implements Serializers { try { return object == null ? null - : serializer.deserialize(this, object as Iterable, - specifiedType: specifiedType); + : serializer.deserialize( + this, + object as Iterable, + specifiedType: specifiedType, + ); } on Error catch (error) { throw DeserializationError(object, specifiedType, error); } @@ -183,14 +205,18 @@ class BuiltJsonSerializers implements Serializers { try { return object == null ? null - : serializer.deserialize(this, object, - specifiedType: specifiedType); + : serializer.deserialize( + this, + object, + specifiedType: specifiedType, + ); } on Error catch (error) { throw DeserializationError(object, specifiedType, error); } } else { throw StateError( - 'serializer must be StructuredSerializer or PrimitiveSerializer'); + 'serializer must be StructuredSerializer or PrimitiveSerializer', + ); } } } @@ -216,8 +242,10 @@ class BuiltJsonSerializers implements Serializers { } Never _throwMissingBuilderFactory(FullType fullType) { - throw StateError('No builder factory for $fullType. ' - 'Fix by adding one, see SerializersBuilder.addBuilderFactory.'); + throw StateError( + 'No builder factory for $fullType. ' + 'Fix by adding one, see SerializersBuilder.addBuilderFactory.', + ); } @override @@ -228,11 +256,12 @@ class BuiltJsonSerializers implements Serializers { @override SerializersBuilder toBuilder() { return BuiltJsonSerializersBuilder._( - _typeToSerializer.toBuilder(), - _wireNameToSerializer.toBuilder(), - _typeNameToSerializer.toBuilder(), - builderFactories.toBuilder(), - serializerPlugins.toBuilder()); + _typeToSerializer.toBuilder(), + _wireNameToSerializer.toBuilder(), + _typeNameToSerializer.toBuilder(), + builderFactories.toBuilder(), + serializerPlugins.toBuilder(), + ); } } @@ -242,30 +271,33 @@ class BuiltJsonSerializersBuilder implements SerializersBuilder { final MapBuilder _wireNameToSerializer; final MapBuilder _typeNameToSerializer; - final MapBuilder _builderFactories; + final MapBuilder _builderFactories; final ListBuilder _plugins; factory BuiltJsonSerializersBuilder() => BuiltJsonSerializersBuilder._( - MapBuilder(), - MapBuilder(), - MapBuilder(), - MapBuilder(), - ListBuilder()); + MapBuilder(), + MapBuilder(), + MapBuilder(), + MapBuilder(), + ListBuilder(), + ); BuiltJsonSerializersBuilder._( - this._typeToSerializer, - this._wireNameToSerializer, - this._typeNameToSerializer, - this._builderFactories, - this._plugins); + this._typeToSerializer, + this._wireNameToSerializer, + this._typeNameToSerializer, + this._builderFactories, + this._plugins, + ); @override void add(Serializer serializer) { if (serializer is! StructuredSerializer && serializer is! PrimitiveSerializer) { throw ArgumentError( - 'serializer must be StructuredSerializer or PrimitiveSerializer'); + 'serializer must be StructuredSerializer or PrimitiveSerializer', + ); } _wireNameToSerializer[serializer.wireName] = serializer; @@ -281,7 +313,7 @@ class BuiltJsonSerializersBuilder implements SerializersBuilder { } @override - void addBuilderFactory(FullType types, Function function) { + void addBuilderFactory(FullType types, Object Function() function) { _builderFactories[types] = function; // Nullability of the top level type is irrelevant to serialization, but // lookup might be done with either nullable or not nullable depending @@ -310,11 +342,12 @@ class BuiltJsonSerializersBuilder implements SerializersBuilder { @override Serializers build() { return BuiltJsonSerializers._( - _typeToSerializer.build(), - _wireNameToSerializer.build(), - _typeNameToSerializer.build(), - _builderFactories.build(), - _plugins.build()); + _typeToSerializer.build(), + _wireNameToSerializer.build(), + _typeNameToSerializer.build(), + _builderFactories.build(), + _plugins.build(), + ); } } diff --git a/built_value/lib/src/built_list_multimap_serializer.dart b/built_value/lib/src/built_list_multimap_serializer.dart index 6e9f8ff5..eb938c93 100644 --- a/built_value/lib/src/built_list_multimap_serializer.dart +++ b/built_value/lib/src/built_list_multimap_serializer.dart @@ -3,21 +3,26 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class BuiltListMultimapSerializer implements StructuredSerializer { final bool structured = true; @override - final Iterable types = BuiltList( - [BuiltListMultimap, BuiltListMultimap().runtimeType]); + final Iterable types = BuiltList([ + BuiltListMultimap, + BuiltListMultimap().runtimeType, + ]); @override final String wireName = 'listMultimap'; @override Iterable serialize( - Serializers serializers, BuiltListMultimap builtListMultimap, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + BuiltListMultimap map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -30,20 +35,25 @@ class BuiltListMultimapSerializer : specifiedType.parameters[1]; var result = []; - for (var key in builtListMultimap.keys) { + for (var key in map.keys) { result.add(serializers.serialize(key, specifiedType: keyType)); - result.add(builtListMultimap[key] - .map( - (value) => serializers.serialize(value, specifiedType: valueType)) - .toList()); + result.add( + map[key] + .map( + (value) => serializers.serialize(value, specifiedType: valueType), + ) + .toList(), + ); } return result; } @override BuiltListMultimap deserialize( - Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; @@ -58,15 +68,18 @@ class BuiltListMultimapSerializer ? ListMultimapBuilder() : serializers.newBuilder(specifiedType) as ListMultimapBuilder; - if (serialized.length % 2 == 1) { + if (serialized.length.isOdd) { throw ArgumentError('odd length'); } for (var i = 0; i != serialized.length; i += 2) { - final key = serializers.deserialize(serialized.elementAt(i), - specifiedType: keyType); + final key = serializers.deserialize( + serialized.elementAt(i), + specifiedType: keyType, + ); final values = (serialized.elementAt(i + 1) as Iterable).map( - (value) => serializers.deserialize(value, specifiedType: valueType)); + (value) => serializers.deserialize(value, specifiedType: valueType), + ); for (var value in values) { result.add(key, value); } diff --git a/built_value/lib/src/built_list_serializer.dart b/built_value/lib/src/built_list_serializer.dart index fbc3eab7..9d5a00d3 100644 --- a/built_value/lib/src/built_list_serializer.dart +++ b/built_value/lib/src/built_list_serializer.dart @@ -3,19 +3,25 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class BuiltListSerializer implements StructuredSerializer { final bool structured = true; @override - final Iterable types = - BuiltList([BuiltList, BuiltList().runtimeType]); + final Iterable types = BuiltList([ + BuiltList, + BuiltList().runtimeType, + ]); @override final String wireName = 'list'; @override - Iterable serialize(Serializers serializers, BuiltList builtList, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + BuiltList map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -24,13 +30,17 @@ class BuiltListSerializer implements StructuredSerializer { ? FullType.unspecified : specifiedType.parameters[0]; - return builtList - .map((item) => serializers.serialize(item, specifiedType: elementType)); + return map.map( + (item) => serializers.serialize(item, specifiedType: elementType), + ); } @override - BuiltList deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + BuiltList deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; @@ -42,8 +52,11 @@ class BuiltListSerializer implements StructuredSerializer { ? ListBuilder() : serializers.newBuilder(specifiedType) as ListBuilder; - result.replace(serialized.map( - (item) => serializers.deserialize(item, specifiedType: elementType))); + result.replace( + serialized.map( + (item) => serializers.deserialize(item, specifiedType: elementType), + ), + ); return result.build(); } } diff --git a/built_value/lib/src/built_map_serializer.dart b/built_value/lib/src/built_map_serializer.dart index 9693e354..cd740859 100644 --- a/built_value/lib/src/built_map_serializer.dart +++ b/built_value/lib/src/built_map_serializer.dart @@ -3,19 +3,25 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class BuiltMapSerializer implements StructuredSerializer { final bool structured = true; @override - final Iterable types = - BuiltList([BuiltMap, BuiltMap().runtimeType]); + final Iterable types = BuiltList([ + BuiltMap, + BuiltMap().runtimeType, + ]); @override final String wireName = 'map'; @override - Iterable serialize(Serializers serializers, BuiltMap builtMap, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + BuiltMap map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -28,17 +34,20 @@ class BuiltMapSerializer implements StructuredSerializer { : specifiedType.parameters[1]; var result = []; - for (var key in builtMap.keys) { + for (var key in map.keys) { result.add(serializers.serialize(key, specifiedType: keyType)); - final value = builtMap[key]; + final value = map[key]; result.add(serializers.serialize(value, specifiedType: valueType)); } return result; } @override - BuiltMap deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + BuiltMap deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; @@ -53,15 +62,19 @@ class BuiltMapSerializer implements StructuredSerializer { ? MapBuilder() : serializers.newBuilder(specifiedType) as MapBuilder; - if (serialized.length % 2 == 1) { + if (serialized.length.isOdd) { throw ArgumentError('odd length'); } for (var i = 0; i != serialized.length; i += 2) { - final key = serializers.deserialize(serialized.elementAt(i), - specifiedType: keyType); - final value = serializers.deserialize(serialized.elementAt(i + 1), - specifiedType: valueType); + final key = serializers.deserialize( + serialized.elementAt(i), + specifiedType: keyType, + ); + final value = serializers.deserialize( + serialized.elementAt(i + 1), + specifiedType: valueType, + ); result[key] = value; } diff --git a/built_value/lib/src/built_set_multimap_serializer.dart b/built_value/lib/src/built_set_multimap_serializer.dart index 4504ff3e..0a55c14a 100644 --- a/built_value/lib/src/built_set_multimap_serializer.dart +++ b/built_value/lib/src/built_set_multimap_serializer.dart @@ -3,7 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class BuiltSetMultimapSerializer implements StructuredSerializer { @@ -15,8 +16,10 @@ class BuiltSetMultimapSerializer @override Iterable serialize( - Serializers serializers, BuiltSetMultimap builtSetMultimap, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + BuiltSetMultimap map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -29,19 +32,25 @@ class BuiltSetMultimapSerializer : specifiedType.parameters[1]; var result = []; - for (var key in builtSetMultimap.keys) { + for (var key in map.keys) { result.add(serializers.serialize(key, specifiedType: keyType)); - result.add(builtSetMultimap[key]! - .map( - (value) => serializers.serialize(value, specifiedType: valueType)) - .toList()); + result.add( + map[key]! + .map( + (value) => serializers.serialize(value, specifiedType: valueType), + ) + .toList(), + ); } return result; } @override - BuiltSetMultimap deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + BuiltSetMultimap deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; @@ -56,15 +65,18 @@ class BuiltSetMultimapSerializer ? SetMultimapBuilder() : serializers.newBuilder(specifiedType) as SetMultimapBuilder; - if (serialized.length % 2 == 1) { + if (serialized.length.isOdd) { throw ArgumentError('odd length'); } for (var i = 0; i != serialized.length; i += 2) { - final key = serializers.deserialize(serialized.elementAt(i), - specifiedType: keyType); - final values = serialized.elementAt(i + 1).map( - (value) => serializers.deserialize(value, specifiedType: valueType)); + final key = serializers.deserialize( + serialized.elementAt(i), + specifiedType: keyType, + ); + final values = (serialized.elementAt(i + 1) as Iterable).map( + (value) => serializers.deserialize(value, specifiedType: valueType), + ); for (var value in values) { result.add(key, value); } diff --git a/built_value/lib/src/built_set_serializer.dart b/built_value/lib/src/built_set_serializer.dart index 9a5d1246..cf88ab08 100644 --- a/built_value/lib/src/built_set_serializer.dart +++ b/built_value/lib/src/built_set_serializer.dart @@ -3,19 +3,25 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class BuiltSetSerializer implements StructuredSerializer { final bool structured = true; @override - final Iterable types = - BuiltList([BuiltSet, BuiltSet().runtimeType]); + final Iterable types = BuiltList([ + BuiltSet, + BuiltSet().runtimeType, + ]); @override final String wireName = 'set'; @override - Iterable serialize(Serializers serializers, BuiltSet builtSet, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + BuiltSet map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -24,13 +30,17 @@ class BuiltSetSerializer implements StructuredSerializer { ? FullType.unspecified : specifiedType.parameters[0]; - return builtSet - .map((item) => serializers.serialize(item, specifiedType: elementType)); + return map.map( + (item) => serializers.serialize(item, specifiedType: elementType), + ); } @override - BuiltSet deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + BuiltSet deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; @@ -41,8 +51,11 @@ class BuiltSetSerializer implements StructuredSerializer { ? SetBuilder() : serializers.newBuilder(specifiedType) as SetBuilder; - result.replace(serialized.map( - (item) => serializers.deserialize(item, specifiedType: elementType))); + result.replace( + serialized.map( + (item) => serializers.deserialize(item, specifiedType: elementType), + ), + ); return result.build(); } } diff --git a/built_value/lib/src/date_time_serializer.dart b/built_value/lib/src/date_time_serializer.dart index cbd4e2d5..1890b522 100644 --- a/built_value/lib/src/date_time_serializer.dart +++ b/built_value/lib/src/date_time_serializer.dart @@ -3,7 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; /// Serializer for [DateTime]. /// @@ -17,21 +18,32 @@ class DateTimeSerializer implements PrimitiveSerializer { final String wireName = 'DateTime'; @override - Object serialize(Serializers serializers, DateTime dateTime, - {FullType specifiedType = FullType.unspecified}) { + Object serialize( + Serializers serializers, + DateTime dateTime, { + FullType specifiedType = FullType.unspecified, + }) { if (!dateTime.isUtc) { throw ArgumentError.value( - dateTime, 'dateTime', 'Must be in utc for serialization.'); + dateTime, + 'dateTime', + 'Must be in utc for serialization.', + ); } return dateTime.microsecondsSinceEpoch; } @override - DateTime deserialize(Serializers serializers, Object? serialized, - {FullType specifiedType = FullType.unspecified}) { + DateTime deserialize( + Serializers serializers, + Object? serialized, { + FullType specifiedType = FullType.unspecified, + }) { var microsecondsSinceEpoch = serialized as int; - return DateTime.fromMicrosecondsSinceEpoch(microsecondsSinceEpoch, - isUtc: true); + return DateTime.fromMicrosecondsSinceEpoch( + microsecondsSinceEpoch, + isUtc: true, + ); } } diff --git a/built_value/lib/src/double_serializer.dart b/built_value/lib/src/double_serializer.dart index 490edab0..274a6cff 100644 --- a/built_value/lib/src/double_serializer.dart +++ b/built_value/lib/src/double_serializer.dart @@ -3,7 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class DoubleSerializer implements PrimitiveSerializer { // Constant names match those in [double]. @@ -19,8 +20,11 @@ class DoubleSerializer implements PrimitiveSerializer { final String wireName = 'double'; @override - Object serialize(Serializers serializers, double aDouble, - {FullType specifiedType = FullType.unspecified}) { + Object serialize( + Serializers serializers, + double aDouble, { + FullType specifiedType = FullType.unspecified, + }) { if (aDouble.isNaN) { return nan; } else if (aDouble.isInfinite) { @@ -31,8 +35,11 @@ class DoubleSerializer implements PrimitiveSerializer { } @override - double deserialize(Serializers serializers, Object? serialized, - {FullType specifiedType = FullType.unspecified}) { + double deserialize( + Serializers serializers, + Object? serialized, { + FullType specifiedType = FullType.unspecified, + }) { if (serialized == nan) { return double.nan; } else if (serialized == negativeInfinity) { diff --git a/built_value/lib/src/duration_serializer.dart b/built_value/lib/src/duration_serializer.dart index af05e0bf..ab7b7b8e 100644 --- a/built_value/lib/src/duration_serializer.dart +++ b/built_value/lib/src/duration_serializer.dart @@ -3,7 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; /// Serializer for [Duration]. /// @@ -17,14 +18,20 @@ class DurationSerializer implements PrimitiveSerializer { final String wireName = 'Duration'; @override - Object serialize(Serializers serializers, Duration duration, - {FullType specifiedType = FullType.unspecified}) { + Object serialize( + Serializers serializers, + Duration duration, { + FullType specifiedType = FullType.unspecified, + }) { return duration.inMicroseconds; } @override - Duration deserialize(Serializers serializers, Object? serialized, - {FullType specifiedType = FullType.unspecified}) { + Duration deserialize( + Serializers serializers, + Object? serialized, { + FullType specifiedType = FullType.unspecified, + }) { return Duration(microseconds: serialized as int); } } diff --git a/built_value/lib/src/int32_serializer.dart b/built_value/lib/src/int32_serializer.dart index 6962086b..e1489092 100644 --- a/built_value/lib/src/int32_serializer.dart +++ b/built_value/lib/src/int32_serializer.dart @@ -3,9 +3,10 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; import 'package:fixnum/fixnum.dart'; +import '../serializer.dart'; + class Int32Serializer implements PrimitiveSerializer { final bool structured = false; @override diff --git a/built_value/lib/src/int64_serializer.dart b/built_value/lib/src/int64_serializer.dart index 51f96a35..56541905 100644 --- a/built_value/lib/src/int64_serializer.dart +++ b/built_value/lib/src/int64_serializer.dart @@ -3,9 +3,10 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; import 'package:fixnum/fixnum.dart'; +import '../serializer.dart'; + class Int64Serializer implements PrimitiveSerializer { final bool structured = false; @override diff --git a/built_value/lib/src/int_serializer.dart b/built_value/lib/src/int_serializer.dart index 115e3910..da11a7a7 100644 --- a/built_value/lib/src/int_serializer.dart +++ b/built_value/lib/src/int_serializer.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import '../serializer.dart'; class IntSerializer implements PrimitiveSerializer { final bool structured = false; diff --git a/built_value/lib/src/json_object_serializer.dart b/built_value/lib/src/json_object_serializer.dart index ef4dc14f..2d0139c0 100644 --- a/built_value/lib/src/json_object_serializer.dart +++ b/built_value/lib/src/json_object_serializer.dart @@ -3,8 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/json_object.dart'; -import 'package:built_value/serializer.dart'; +import '../json_object.dart'; +import '../serializer.dart'; class JsonObjectSerializer implements PrimitiveSerializer { final bool structured = false; diff --git a/built_value/lib/src/list_serializer.dart b/built_value/lib/src/list_serializer.dart index d0a82396..50519ed5 100644 --- a/built_value/lib/src/list_serializer.dart +++ b/built_value/lib/src/list_serializer.dart @@ -3,7 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class ListSerializer implements StructuredSerializer { final bool structured = true; @@ -13,8 +14,11 @@ class ListSerializer implements StructuredSerializer { final String wireName = 'List'; @override - Iterable serialize(Serializers serializers, List list, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + List map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -23,13 +27,17 @@ class ListSerializer implements StructuredSerializer { ? FullType.unspecified : specifiedType.parameters[0]; - return list - .map((item) => serializers.serialize(item, specifiedType: elementType)); + return map.map( + (item) => serializers.serialize(item, specifiedType: elementType), + ); } @override - List deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + List deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; diff --git a/built_value/lib/src/map_serializer.dart b/built_value/lib/src/map_serializer.dart index c77621ac..afd47810 100644 --- a/built_value/lib/src/map_serializer.dart +++ b/built_value/lib/src/map_serializer.dart @@ -3,19 +3,25 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class MapSerializer implements StructuredSerializer { final bool structured = true; @override - final Iterable types = - BuiltList([Map, {}.runtimeType]); + final Iterable types = BuiltList([ + Map, + {}.runtimeType, + ]); @override final String wireName = 'Map'; @override - Iterable serialize(Serializers serializers, Map Map, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Map map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -28,17 +34,20 @@ class MapSerializer implements StructuredSerializer { : specifiedType.parameters[1]; var result = []; - for (var key in Map.keys) { + for (var key in map.keys) { result.add(serializers.serialize(key, specifiedType: keyType)); - final value = Map[key]; + final value = map[key]; result.add(serializers.serialize(value, specifiedType: valueType)); } return result; } @override - Map deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Map deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; @@ -53,15 +62,19 @@ class MapSerializer implements StructuredSerializer { ? {} : serializers.newBuilder(specifiedType) as Map; - if (serialized.length % 2 == 1) { + if (serialized.length.isOdd) { throw ArgumentError('odd length'); } for (var i = 0; i != serialized.length; i += 2) { - final key = serializers.deserialize(serialized.elementAt(i), - specifiedType: keyType); - final value = serializers.deserialize(serialized.elementAt(i + 1), - specifiedType: valueType); + final key = serializers.deserialize( + serialized.elementAt(i), + specifiedType: keyType, + ); + final value = serializers.deserialize( + serialized.elementAt(i + 1), + specifiedType: valueType, + ); result[key] = value; } diff --git a/built_value/lib/src/null_serializer.dart b/built_value/lib/src/null_serializer.dart index f6f35561..4cd4151b 100644 --- a/built_value/lib/src/null_serializer.dart +++ b/built_value/lib/src/null_serializer.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import '../serializer.dart'; class NullSerializer implements PrimitiveSerializer { final bool structured = false; diff --git a/built_value/lib/src/num_serializer.dart b/built_value/lib/src/num_serializer.dart index 40b74cd4..bb227f32 100644 --- a/built_value/lib/src/num_serializer.dart +++ b/built_value/lib/src/num_serializer.dart @@ -3,8 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; -import 'package:built_value/src/double_serializer.dart'; +import '../serializer.dart'; +import 'double_serializer.dart'; class NumSerializer implements PrimitiveSerializer { final bool structured = false; diff --git a/built_value/lib/src/regexp_serializer.dart b/built_value/lib/src/regexp_serializer.dart index 97d5c3c0..628fd54f 100644 --- a/built_value/lib/src/regexp_serializer.dart +++ b/built_value/lib/src/regexp_serializer.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import '../serializer.dart'; /// Runtime type for [RegExp] private implementation. final _runtimeType = RegExp('').runtimeType; diff --git a/built_value/lib/src/set_serializer.dart b/built_value/lib/src/set_serializer.dart index ca53bb88..8fac25b4 100644 --- a/built_value/lib/src/set_serializer.dart +++ b/built_value/lib/src/set_serializer.dart @@ -3,7 +3,8 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; + +import '../serializer.dart'; class SetSerializer implements StructuredSerializer { final bool structured = true; @@ -13,8 +14,11 @@ class SetSerializer implements StructuredSerializer { final String wireName = 'Set'; @override - Iterable serialize(Serializers serializers, Set set, - {FullType specifiedType = FullType.unspecified}) { + Iterable serialize( + Serializers serializers, + Set map, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; if (!isUnderspecified) serializers.expectBuilder(specifiedType); @@ -23,13 +27,17 @@ class SetSerializer implements StructuredSerializer { ? FullType.unspecified : specifiedType.parameters[0]; - return set - .map((item) => serializers.serialize(item, specifiedType: elementType)); + return map.map( + (item) => serializers.serialize(item, specifiedType: elementType), + ); } @override - Set deserialize(Serializers serializers, Iterable serialized, - {FullType specifiedType = FullType.unspecified}) { + Set deserialize( + Serializers serializers, + Iterable serialized, { + FullType specifiedType = FullType.unspecified, + }) { var isUnderspecified = specifiedType.isUnspecified || specifiedType.parameters.isEmpty; diff --git a/built_value/lib/src/string_serializer.dart b/built_value/lib/src/string_serializer.dart index 5d7bea4f..0826c70e 100644 --- a/built_value/lib/src/string_serializer.dart +++ b/built_value/lib/src/string_serializer.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import '../serializer.dart'; class StringSerializer implements PrimitiveSerializer { final bool structured = false; diff --git a/built_value/lib/src/uint8_list_serializer.dart b/built_value/lib/src/uint8_list_serializer.dart index 5e2b107b..f4fa40a2 100644 --- a/built_value/lib/src/uint8_list_serializer.dart +++ b/built_value/lib/src/uint8_list_serializer.dart @@ -6,7 +6,7 @@ import 'dart:convert'; import 'dart:typed_data'; import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import '../serializer.dart'; class Uint8ListSerializer implements PrimitiveSerializer { @override diff --git a/built_value/lib/src/uri_serializer.dart b/built_value/lib/src/uri_serializer.dart index c4936de0..e4fffb18 100644 --- a/built_value/lib/src/uri_serializer.dart +++ b/built_value/lib/src/uri_serializer.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. import 'package:built_collection/built_collection.dart'; -import 'package:built_value/serializer.dart'; +import '../serializer.dart'; class UriSerializer implements PrimitiveSerializer { final bool structured = false; diff --git a/built_value/lib/standard_json_plugin.dart b/built_value/lib/standard_json_plugin.dart index ab0e3bd1..ebc4c9d7 100644 --- a/built_value/lib/standard_json_plugin.dart +++ b/built_value/lib/standard_json_plugin.dart @@ -2,11 +2,13 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -import 'package:built_collection/built_collection.dart'; -import 'package:built_value/json_object.dart'; -import 'package:built_value/serializer.dart'; import 'dart:convert' show json; +import 'package:built_collection/built_collection.dart'; + +import 'json_object.dart'; +import 'serializer.dart'; + /// Switches to "standard" JSON format. /// /// The default serialization format is more powerful, with better performance @@ -18,8 +20,10 @@ import 'dart:convert' show json; /// `Iso8601DateTimeSerializer` which switches serialization of `DateTime` /// from microseconds since epoch to ISO 8601 format. class StandardJsonPlugin implements SerializerPlugin { - static final BuiltSet _unsupportedTypes = - BuiltSet([BuiltListMultimap, BuiltSetMultimap]); + static final BuiltSet _unsupportedTypes = BuiltSet([ + BuiltListMultimap, + BuiltSetMultimap, + ]); /// The field used to specify the value type if needed. Defaults to `$`. final String discriminator; @@ -35,21 +39,27 @@ class StandardJsonPlugin implements SerializerPlugin { this.discriminator = r'$', this.valueKey = '', Iterable? typesToLeaveAsList, - }) : typesToLeaveAsList = BuiltSet( - {BuiltList, BuiltSet, JsonObject, ...?typesToLeaveAsList}); + }) : typesToLeaveAsList = BuiltSet({ + BuiltList, + BuiltSet, + JsonObject, + ...?typesToLeaveAsList, + }); @override Object? beforeSerialize(Object? object, FullType specifiedType) { if (_unsupportedTypes.contains(specifiedType.root)) { throw ArgumentError( - 'Standard JSON cannot serialize type ${specifiedType.root}.'); + 'Standard JSON cannot serialize type ${specifiedType.root}.', + ); } return object; } @override Object? afterSerialize(Object? object, FullType specifiedType) { - if (object is List && !typesToLeaveAsList.contains(specifiedType.root)) { + if (object is List && + !typesToLeaveAsList.contains(specifiedType.root)) { if (specifiedType.isUnspecified) { return _toMapWithDiscriminator(object); } else { @@ -66,8 +76,11 @@ class StandardJsonPlugin implements SerializerPlugin { if (specifiedType.isUnspecified) { return _toListUsingDiscriminator(object); } else { - return _toList(object, _needsEncodedKeys(specifiedType), - keepNulls: specifiedType.root == BuiltMap); + return _toList( + object, + _needsEncodedKeys(specifiedType), + keepNulls: specifiedType.root == BuiltMap, + ); } } else { return object; @@ -100,12 +113,15 @@ class StandardJsonPlugin implements SerializerPlugin { /// Converts serialization output, a `List`, to a `Map`, when the serialized /// type is not known statically. The type will be specified in the /// [discriminator] field. - Map _toMapWithDiscriminator(List list) { - var type = list[0]; + Map _toMapWithDiscriminator(List list) { + var type = list[0]!; if (type == 'list') { // Embed the list in the map. - return {discriminator: type, valueKey: list.sublist(1)}; + return { + discriminator: 'list', + valueKey: list.sublist(1), + }; } // Length is at least two because we have one entry for type and one for @@ -136,14 +152,14 @@ class StandardJsonPlugin implements SerializerPlugin { ? _encodeKey(list[i * 2 + 1]) : list[i * 2 + 1] as String; final value = list[i * 2 + 2]; - result[key] = value; + result[key] = value as Object; } return result; } /// JSON-encodes an `Object` key so it can be stored as a `String`. Needed /// because JSON maps are only allowed strings as keys. - String _encodeKey(Object key) { + String _encodeKey(Object? key) { return json.encode(key); } @@ -152,12 +168,17 @@ class StandardJsonPlugin implements SerializerPlugin { /// /// By default keys with null values are dropped, pass [keepNulls] true when /// the map is an actual map with nullable values, so they should be kept. - List _toList(Map map, bool hasEncodedKeys, - {bool keepNulls = false}) { + List _toList( + Map map, + bool hasEncodedKeys, { + bool keepNulls = false, + }) { var nullValueCount = keepNulls ? 0 : map.values.where((value) => value == null).length; var result = List.filled( - (map.length - nullValueCount) * 2, 0 /* Will be overwritten. */); + (map.length - nullValueCount) * 2, + 0 /* Will be overwritten. */, + ); var i = 0; map.forEach((key, value) { // Drop null values, they are represented by missing keys. @@ -176,9 +197,11 @@ class StandardJsonPlugin implements SerializerPlugin { List _toListUsingDiscriminator(Map map) { var type = map[discriminator]; - if (type == null) { - throw ArgumentError('Unknown type on deserialization. ' - 'Need either specifiedType or discriminator field.'); + if (type is! Object) { + throw ArgumentError( + 'Unknown type on deserialization. ' + 'Need either specifiedType or discriminator field.', + ); } if (type == 'list') { @@ -202,8 +225,10 @@ class StandardJsonPlugin implements SerializerPlugin { } var nullValueCount = map.values.where((value) => value == null).length; - var result = List.filled( - (map.length - nullValueCount) * 2 - 1, 0 /* Will be overwritten. */); + var result = List.filled( + (map.length - nullValueCount) * 2 - 1, + null, + ); result[0] = type; var i = 1; diff --git a/built_value/pubspec.yaml b/built_value/pubspec.yaml index 26e97375..71b1bde3 100644 --- a/built_value/pubspec.yaml +++ b/built_value/pubspec.yaml @@ -17,5 +17,9 @@ dependencies: meta: ^1.3.0 dev_dependencies: - pedantic: ^1.4.0 + dart_flutter_team_lints: ^3.5.2 test: ^1.16.0 + +dependency_overrides: + built_value_generator: + path: ../built_value_generator diff --git a/built_value/test/built_list_async_deserializer_test.dart b/built_value/test/built_list_async_deserializer_test.dart index 2fbb9bce..d6a87519 100644 --- a/built_value/test/built_list_async_deserializer_test.dart +++ b/built_value/test/built_list_async_deserializer_test.dart @@ -14,7 +14,7 @@ void main() { var data = BuiltList([1, 2, 3]); var specifiedType = const FullType(BuiltList, [FullType(int)]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(specifiedType, () => ListBuilder())) + ..addBuilderFactory(specifiedType, ListBuilder.new)) .build(); var serialized = json.decode(json.encode([1, 2, 3])) as Iterable; diff --git a/built_value/test/built_list_multimap_serializer_test.dart b/built_value/test/built_list_multimap_serializer_test.dart index 22e8824c..b952fc04 100644 --- a/built_value/test/built_list_multimap_serializer_test.dart +++ b/built_value/test/built_list_multimap_serializer_test.dart @@ -19,7 +19,7 @@ void main() { const FullType(BuiltListMultimap, [FullType(int), FullType(String)]); var serializers = (Serializers().toBuilder() ..addBuilderFactory( - specifiedType, () => ListMultimapBuilder())) + specifiedType, ListMultimapBuilder.new)) .build(); var serialized = json.decode(json.encode([ 1, diff --git a/built_value/test/built_list_serializer_test.dart b/built_value/test/built_list_serializer_test.dart index aa7db906..77e2c777 100644 --- a/built_value/test/built_list_serializer_test.dart +++ b/built_value/test/built_list_serializer_test.dart @@ -32,7 +32,7 @@ void main() { var data = BuiltList([1, 2, 3]); var specifiedType = const FullType(BuiltList, [FullType(int)]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(specifiedType, () => ListBuilder())) + ..addBuilderFactory(specifiedType, ListBuilder.new)) .build(); var serialized = json.decode(json.encode([1, 2, 3])) as Object; @@ -65,10 +65,9 @@ void main() { FullType(BuiltList, [FullType(int)]) ]); var serializers = (Serializers().toBuilder() + ..addBuilderFactory(specifiedType, ListBuilder>.new) ..addBuilderFactory( - specifiedType, () => ListBuilder>()) - ..addBuilderFactory(const FullType(BuiltList, [FullType(int)]), - () => ListBuilder())) + const FullType(BuiltList, [FullType(int)]), ListBuilder.new)) .build(); var serialized = json.decode(json.encode([ [1, 2, 3], diff --git a/built_value/test/built_map_serializer_test.dart b/built_value/test/built_map_serializer_test.dart index 90c88a34..93e55ae3 100644 --- a/built_value/test/built_map_serializer_test.dart +++ b/built_value/test/built_map_serializer_test.dart @@ -35,7 +35,7 @@ void main() { var specifiedType = const FullType(BuiltMap, [FullType(int), FullType(String)]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(specifiedType, () => MapBuilder())) + ..addBuilderFactory(specifiedType, MapBuilder.new)) .build(); var serialized = json.decode(json.encode([1, 'one', 2, 'two', 3, 'three'])) as Object; @@ -68,9 +68,9 @@ void main() { var specifiedType = const FullType(BuiltMap, [innerTypeLeft, FullType(String)]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(innerTypeLeft, () => MapBuilder()) + ..addBuilderFactory(innerTypeLeft, MapBuilder.new) ..addBuilderFactory( - specifiedType, () => MapBuilder, String>())) + specifiedType, MapBuilder, String>.new)) .build(); var serialized = json.decode(json.encode([ [1, 'one'], @@ -100,10 +100,9 @@ void main() { var specifiedType = const FullType(BuiltMap, [FullType(int), innerTypeRight]); var serializers = (Serializers().toBuilder() + ..addBuilderFactory(innerTypeRight, MapBuilder.new) ..addBuilderFactory( - innerTypeRight, () => MapBuilder()) - ..addBuilderFactory( - specifiedType, () => MapBuilder>())) + specifiedType, MapBuilder>.new)) .build(); var serialized = json.decode(json.encode([ 1, @@ -136,11 +135,11 @@ void main() { [builtMapOfIntIntGenericType, builtMapOfStringStringGenericType]); var serializers = (Serializers().toBuilder() ..addBuilderFactory( - builtMapOfIntIntGenericType, () => MapBuilder()) - ..addBuilderFactory(builtMapOfStringStringGenericType, - () => MapBuilder()) + builtMapOfIntIntGenericType, MapBuilder.new) + ..addBuilderFactory( + builtMapOfStringStringGenericType, MapBuilder.new) ..addBuilderFactory(specifiedType, - () => MapBuilder, BuiltMap>())) + MapBuilder, BuiltMap>.new)) .build(); var serialized = json.decode(json.encode([ [1, 1], @@ -161,14 +160,12 @@ void main() { test('keeps generic type on deserialization', () { final genericSerializer = (serializers.toBuilder() + ..addBuilderFactory(specifiedType, + MapBuilder, BuiltMap>.new) ..addBuilderFactory( - specifiedType, - () => - MapBuilder, BuiltMap>()) - ..addBuilderFactory( - builtMapOfIntIntGenericType, () => MapBuilder()) + builtMapOfIntIntGenericType, MapBuilder.new) ..addBuilderFactory(builtMapOfStringStringGenericType, - () => MapBuilder())) + MapBuilder.new)) .build(); expect( @@ -184,7 +181,7 @@ void main() { var specifiedType = const FullType(BuiltMap, [FullType(int), FullType.unspecified]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(specifiedType, () => MapBuilder())) + ..addBuilderFactory(specifiedType, MapBuilder.new)) .build(); var serialized = json.decode(json.encode([ 1, @@ -211,8 +208,7 @@ void main() { var specifiedType = const FullType(BuiltMap, [FullType.unspecified, FullType(String)]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory( - specifiedType, () => MapBuilder())) + ..addBuilderFactory(specifiedType, MapBuilder.new)) .build(); var serialized = json.decode(json.encode([ ['int', 1], diff --git a/built_value/test/built_set_multimap_serializer_test.dart b/built_value/test/built_set_multimap_serializer_test.dart index 9ed95184..bd69e023 100644 --- a/built_value/test/built_set_multimap_serializer_test.dart +++ b/built_value/test/built_set_multimap_serializer_test.dart @@ -19,7 +19,7 @@ void main() { const FullType(BuiltSetMultimap, [FullType(int), FullType(String)]); var serializers = (Serializers().toBuilder() ..addBuilderFactory( - specifiedType, () => SetMultimapBuilder())) + specifiedType, SetMultimapBuilder.new)) .build(); var serialized = json.decode(json.encode([ 1, diff --git a/built_value/test/built_set_serializer_test.dart b/built_value/test/built_set_serializer_test.dart index 31625230..822a4032 100644 --- a/built_value/test/built_set_serializer_test.dart +++ b/built_value/test/built_set_serializer_test.dart @@ -35,7 +35,7 @@ void main() { var data = BuiltSet([1, 2, 3]); var specifiedType = const FullType(BuiltSet, [FullType(int)]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(specifiedType, () => SetBuilder())) + ..addBuilderFactory(specifiedType, SetBuilder.new)) .build(); var serialized = json.decode(json.encode([1, 2, 3])) as Object; @@ -68,9 +68,9 @@ void main() { FullType(BuiltSet, [FullType(int)]) ]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(specifiedType, () => SetBuilder>()) - ..addBuilderFactory(const FullType(BuiltSet, [FullType(int)]), - () => SetBuilder())) + ..addBuilderFactory(specifiedType, SetBuilder>.new) + ..addBuilderFactory( + const FullType(BuiltSet, [FullType(int)]), SetBuilder.new)) .build(); var serialized = json.decode(json.encode([ [1, 2, 3], diff --git a/built_value/test/built_value_test.dart b/built_value/test/built_value_test.dart index 5e8f87cc..860620f3 100644 --- a/built_value/test/built_value_test.dart +++ b/built_value/test/built_value_test.dart @@ -26,5 +26,5 @@ class YesNoEnum extends EnumClass { static const YesNoEnum yes = YesNoEnum._('yes'); static const YesNoEnum no = YesNoEnum._('no'); - const YesNoEnum._(String name) : super(name); + const YesNoEnum._(super.name); } diff --git a/built_value/test/duration_serializer_test.dart b/built_value/test/duration_serializer_test.dart index 01a4badb..f55e9549 100644 --- a/built_value/test/duration_serializer_test.dart +++ b/built_value/test/duration_serializer_test.dart @@ -11,7 +11,7 @@ void main() { var serializers = Serializers(); group('Duration with known specifiedType', () { - var data = Duration( + var data = const Duration( days: 1, hours: 2, minutes: 3, @@ -38,7 +38,7 @@ void main() { }); group('Duration with unknown specifiedType', () { - var data = Duration( + var data = const Duration( days: 1, hours: 2, minutes: 3, diff --git a/built_value/test/iso_8601_duration_serializer_test.dart b/built_value/test/iso_8601_duration_serializer_test.dart index 47381522..81d76bcc 100644 --- a/built_value/test/iso_8601_duration_serializer_test.dart +++ b/built_value/test/iso_8601_duration_serializer_test.dart @@ -40,7 +40,7 @@ void main() { group('Duration with known specifiedType', () { final specifiedType = const FullType(Duration); - testTable.forEach((testValue) { + for (var testValue in testTable) { test('can be serialized', () { expect( serializers.serialize(testValue[#d]!, specifiedType: specifiedType), @@ -53,19 +53,19 @@ void main() { specifiedType: specifiedType), testValue[#d]); }); - }); - badOnes.forEach((badOne) { + } + for (var badOne in badOnes) { test('deserialize throws if not ISO format', () { expect( () => serializers.deserialize(badOne, specifiedType: specifiedType), throwsA(const TypeMatcher())); }); - }); + } }); group('Duration with unknown specifiedType', () { final specifiedType = FullType.unspecified; - testTable.forEach((testValue) { + for (var testValue in testTable) { test('can be serialized', () { expect( serializers.serialize(testValue[#d]!, specifiedType: specifiedType), @@ -78,10 +78,10 @@ void main() { specifiedType: specifiedType), testValue[#d]); }); - }); + } group('Duration with subsecond data', () { - final data = Duration(seconds: 2, milliseconds: 4); + final data = const Duration(seconds: 2, milliseconds: 4); final specifiedType = const FullType(Duration); test('throws an error upon serialization', () { expect(() => serializers.serialize(data, specifiedType: specifiedType), diff --git a/built_value/test/map_serializer_test.dart b/built_value/test/map_serializer_test.dart index cc0ef11a..0849229f 100644 --- a/built_value/test/map_serializer_test.dart +++ b/built_value/test/map_serializer_test.dart @@ -16,15 +16,17 @@ void main() { json.decode(json.encode([1, 'one', 2, 'two', 3, 'three'])) as Object; test('cannot be serialized', () { - expect(() => serializers.serialize(data, specifiedType: specifiedType), - throwsA(const TypeMatcher())); + expect( + () => serializers.serialize(data, specifiedType: specifiedType), + throwsA(const TypeMatcher()), + ); }); test('cannot be deserialized', () { expect( - () => - serializers.deserialize(serialized, specifiedType: specifiedType), - throwsA(const TypeMatcher())); + () => serializers.deserialize(serialized, specifiedType: specifiedType), + throwsA(const TypeMatcher()), + ); }); }); @@ -38,197 +40,253 @@ void main() { json.decode(json.encode([1, 'one', 2, 'two', 3, 'three'])) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); test('keeps generic type when deserialized', () { expect( - serializers - .deserialize(serialized, specifiedType: specifiedType) - .runtimeType, - {}.runtimeType); + serializers + .deserialize(serialized, specifiedType: specifiedType) + .runtimeType, + {}.runtimeType, + ); }); }); group('Map nested left with known specifiedType', () { var data = , String>{ {1: 'one'}: 'one!', - {2: 'two'}: 'two!' + {2: 'two'}: 'two!', }; const innerTypeLeft = FullType(Map, [FullType(int), FullType(String)]); var specifiedType = const FullType(Map, [innerTypeLeft, FullType(String)]); var serializers = (Serializers().toBuilder() ..addBuilderFactory(innerTypeLeft, () => {}) ..addBuilderFactory( - specifiedType, () => , String>{})) + specifiedType, + () => , String>{}, + )) .build(); - var serialized = json.decode(json.encode([ - [1, 'one'], - 'one!', - [2, 'two'], - 'two!' - ])) as Object; + var serialized = json.decode( + json.encode([ + [1, 'one'], + 'one!', + [2, 'two'], + 'two!', + ]), + ) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { // `expect` does not deep compare `Map` by key, `toString` is close // enough. expect( - serializers - .deserialize(serialized, specifiedType: specifiedType) - .toString(), - data.toString()); + serializers + .deserialize(serialized, specifiedType: specifiedType) + .toString(), + data.toString(), + ); }); }); group('Map nested right with known specifiedType', () { var data = >{ 1: {'one': 'one!'}, - 2: {'two': 'two!'} + 2: {'two': 'two!'}, }; const innerTypeRight = FullType(Map, [FullType(String), FullType(String)]); var specifiedType = const FullType(Map, [FullType(int), innerTypeRight]); var serializers = (Serializers().toBuilder() ..addBuilderFactory(innerTypeRight, () => {}) ..addBuilderFactory( - specifiedType, () => >{})) + specifiedType, + () => >{}, + )) .build(); - var serialized = json.decode(json.encode([ - 1, - ['one', 'one!'], - 2, - ['two', 'two!'] - ])) as Object; + var serialized = json.decode( + json.encode([ + 1, + ['one', 'one!'], + 2, + ['two', 'two!'], + ]), + ) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); }); group('Map nested both with known specifiedType', () { var data = , Map>{ {1: 1}: {'one': 'one!'}, - {2: 2}: {'two': 'two!'} + {2: 2}: {'two': 'two!'}, }; - const MapOfIntIntGenericType = - FullType(Map, [FullType(int), FullType(int)]); - const MapOfStringStringGenericType = - FullType(Map, [FullType(String), FullType(String)]); - var specifiedType = const FullType( - Map, [MapOfIntIntGenericType, MapOfStringStringGenericType]); + const mapOfIntIntGenericType = FullType(Map, [ + FullType(int), + FullType(int), + ]); + const mapOfStringStringGenericType = FullType(Map, [ + FullType(String), + FullType(String), + ]); + var specifiedType = const FullType(Map, [ + mapOfIntIntGenericType, + mapOfStringStringGenericType, + ]); var serializers = (Serializers().toBuilder() - ..addBuilderFactory(MapOfIntIntGenericType, () => {}) + ..addBuilderFactory(mapOfIntIntGenericType, () => {}) ..addBuilderFactory( - MapOfStringStringGenericType, () => {}) + mapOfStringStringGenericType, + () => {}, + ) ..addBuilderFactory( - specifiedType, () => , Map>{})) + specifiedType, + () => , Map>{}, + )) .build(); - var serialized = json.decode(json.encode([ - [1, 1], - ['one', 'one!'], - [2, 2], - ['two', 'two!'] - ])) as Object; + var serialized = json.decode( + json.encode([ + [1, 1], + ['one', 'one!'], + [2, 2], + ['two', 'two!'], + ]), + ) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { // `expect` does not deep compare `Map` by key, `toString` is close // enough. expect( - serializers - .deserialize(serialized, specifiedType: specifiedType) - .toString(), - data.toString()); + serializers + .deserialize(serialized, specifiedType: specifiedType) + .toString(), + data.toString(), + ); }); test('keeps generic type on deserialization', () { final genericSerializer = (serializers.toBuilder() ..addBuilderFactory( - specifiedType, () => , Map>{}) - ..addBuilderFactory(MapOfIntIntGenericType, () => {}) + specifiedType, + () => , Map>{}, + ) + ..addBuilderFactory(mapOfIntIntGenericType, () => {}) ..addBuilderFactory( - MapOfStringStringGenericType, () => {})) + mapOfStringStringGenericType, + () => {}, + )) .build(); expect( - genericSerializer - .deserialize(serialized, specifiedType: specifiedType) - .runtimeType, - , Map>{}.runtimeType); + genericSerializer + .deserialize(serialized, specifiedType: specifiedType) + .runtimeType, + , Map>{}.runtimeType, + ); }); }); group('Map with Object values', () { var data = {1: 'one', 2: 2, 3: 'three'}; - var specifiedType = - const FullType(Map, [FullType(int), FullType.unspecified]); + var specifiedType = const FullType(Map, [ + FullType(int), + FullType.unspecified, + ]); var serializers = (Serializers().toBuilder() ..addBuilderFactory(specifiedType, () => {})) .build(); - var serialized = json.decode(json.encode([ - 1, - ['String', 'one'], - 2, - ['int', 2], - 3, - ['String', 'three'] - ])) as Object; + var serialized = json.decode( + json.encode([ + 1, + ['String', 'one'], + 2, + ['int', 2], + 3, + ['String', 'three'], + ]), + ) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); }); group('Map with Object keys', () { var data = {1: 'one', 'two': 'two', 3: 'three'}; - var specifiedType = - const FullType(Map, [FullType.unspecified, FullType(String)]); + var specifiedType = const FullType(Map, [ + FullType.unspecified, + FullType(String), + ]); var serializers = (Serializers().toBuilder() ..addBuilderFactory(specifiedType, () => {})) .build(); - var serialized = json.decode(json.encode([ - ['int', 1], - 'one', - ['String', 'two'], - 'two', - ['int', 3], - 'three' - ])) as Object; + var serialized = json.decode( + json.encode([ + ['int', 1], + 'one', + ['String', 'two'], + 'two', + ['int', 3], + 'three', + ]), + ) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); }); @@ -236,23 +294,29 @@ void main() { var data = {1: 'one', 'two': 2, 3: 'three'}; var specifiedType = const FullType(Map); var serializers = Serializers(); - var serialized = json.decode(json.encode([ - ['int', 1], - ['String', 'one'], - ['String', 'two'], - ['int', 2], - ['int', 3], - ['String', 'three'] - ])) as Object; + var serialized = json.decode( + json.encode([ + ['int', 1], + ['String', 'one'], + ['String', 'two'], + ['int', 2], + ['int', 3], + ['String', 'three'], + ]), + ) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); }); @@ -260,24 +324,30 @@ void main() { var data = {1: 'one', 'two': 2, 3: 'three'}; var specifiedType = FullType.unspecified; var serializers = Serializers(); - var serialized = json.decode(json.encode([ - 'Map', - ['int', 1], - ['String', 'one'], - ['String', 'two'], - ['int', 2], - ['int', 3], - ['String', 'three'] - ])) as Object; + var serialized = json.decode( + json.encode([ + 'Map', + ['int', 1], + ['String', 'one'], + ['String', 'two'], + ['int', 2], + ['int', 3], + ['String', 'three'], + ]), + ) as Object; test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); }); } diff --git a/built_value/test/serializers_test.dart b/built_value/test/serializers_test.dart index d853d5f8..8944575f 100644 --- a/built_value/test/serializers_test.dart +++ b/built_value/test/serializers_test.dart @@ -12,66 +12,97 @@ void main() { var serializers = Serializers(); final moreSerializers = (serializers.toBuilder() ..addAll([TestSerializer()]) - ..addBuilderFactory(FullType(TestSerializer), () => null)) + ..addBuilderFactory(const FullType(TestSerializer), Object.new)) .build(); final serializersWithPlugin = (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build(); group(Serializers, () { test('exposes iterable of serializer', () { - expect(serializers.serializers, contains(TypeMatcher())); + expect( + serializers.serializers, + contains(const TypeMatcher()), + ); }); test('can be added to', () { expect( - moreSerializers.serializers, contains(TypeMatcher())); + moreSerializers.serializers, + contains(const TypeMatcher()), + ); }); test('can be merged', () { var mergedSerializers = (serializers.toBuilder()..mergeAll([moreSerializers])).build(); - expect(mergedSerializers.serializers, - contains(TypeMatcher())); - expect(mergedSerializers.builderFactories.keys, - contains(FullType(TestSerializer))); + expect( + mergedSerializers.serializers, + contains(const TypeMatcher()), + ); + expect( + mergedSerializers.builderFactories.keys, + contains(const FullType(TestSerializer)), + ); }); test('can be merged by static method', () { var mergedSerializers = Serializers.merge([serializers, moreSerializers]); - expect(mergedSerializers.serializers, - contains(TypeMatcher())); - expect(mergedSerializers.builderFactories.keys, - contains(FullType(TestSerializer))); + expect( + mergedSerializers.serializers, + contains(const TypeMatcher()), + ); + expect( + mergedSerializers.builderFactories.keys, + contains(const FullType(TestSerializer)), + ); }); test('provides convenience toJson method', () { - expect(serializers.toJson(DateTimeSerializer(), DateTime.utc(2020, 1, 1)), - '1577836800000000'); + expect( + serializers.toJson(DateTimeSerializer(), DateTime.utc(2020, 1, 1)), + '1577836800000000', + ); }); test('provides convenience fromJson method', () { - expect(serializers.fromJson(DateTimeSerializer(), '1577836800000000'), - DateTime.utc(2020, 1, 1)); + expect( + serializers.fromJson(DateTimeSerializer(), '1577836800000000'), + DateTime.utc(2020, 1, 1), + ); }); test('serializes null int to null', () { - expect(serializers.serialize(null, specifiedType: FullType(int)), null); + expect( + serializers.serialize(null, specifiedType: const FullType(int)), + null, + ); }); test('deserializes null int from null', () { - expect(serializers.deserialize(null, specifiedType: FullType(int)), null); + expect( + serializers.deserialize(null, specifiedType: const FullType(int)), + null, + ); }); test('serializes null int to null when plugin is installed', () { expect( - serializersWithPlugin.serialize(null, specifiedType: FullType(int)), - null); + serializersWithPlugin.serialize( + null, + specifiedType: const FullType(int), + ), + null, + ); }); test('deserializes null int from null when plugin is installed', () { expect( - serializersWithPlugin.deserialize(null, specifiedType: FullType(int)), - null); + serializersWithPlugin.deserialize( + null, + specifiedType: const FullType(int), + ), + null, + ); }); test('serializes unknown type null to null', () { @@ -86,10 +117,15 @@ void main() { expect(serializersWithPlugin.serialize(null), {r'$': 'Null', '': null}); }); - test('deserializes null from unknown type null when plugin is installed', - () { - expect(serializersWithPlugin.deserialize({r'$': 'Null', '': null}), null); - }); + test( + 'deserializes null from unknown type null when plugin is installed', + () { + expect( + serializersWithPlugin.deserialize({r'$': 'Null', '': null}), + null, + ); + }, + ); }); } @@ -101,14 +137,20 @@ class TestSerializer implements PrimitiveSerializer { String get wireName => ''; @override - Object? deserialize(Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}) { + Object? deserialize( + Serializers serializers, + Object serialized, { + FullType specifiedType = FullType.unspecified, + }) { return null; } @override - Object serialize(Serializers serializers, Object? object, - {FullType specifiedType = FullType.unspecified}) { + Object serialize( + Serializers serializers, + Object? object, { + FullType specifiedType = FullType.unspecified, + }) { return ''; } } diff --git a/built_value/test/standard_json_plugin_test.dart b/built_value/test/standard_json_plugin_test.dart index d47f92a7..40241e35 100644 --- a/built_value/test/standard_json_plugin_test.dart +++ b/built_value/test/standard_json_plugin_test.dart @@ -5,34 +5,34 @@ import 'dart:convert'; import 'package:built_collection/built_collection.dart'; -import 'package:built_value/standard_json_plugin.dart'; import 'package:built_value/serializer.dart'; +import 'package:built_value/standard_json_plugin.dart'; import 'package:test/test.dart'; void main() { var serializers = (Serializers().toBuilder() ..addPlugin(StandardJsonPlugin()) - ..addBuilderFactory(const FullType(BuiltList, [FullType(int)]), - () => ListBuilder()) + ..addBuilderFactory( + const FullType(BuiltList, [FullType(int)]), ListBuilder.new) ..addBuilderFactory( const FullType(BuiltList, [ FullType(BuiltList, [FullType(int)]) ]), - () => ListBuilder>()) + ListBuilder>.new) ..addBuilderFactory( - const FullType(BuiltSet, [FullType(int)]), () => SetBuilder()) + const FullType(BuiltSet, [FullType(int)]), SetBuilder.new) ..addBuilderFactory( const FullType(BuiltMap, [FullType(int), FullType(String)]), - () => MapBuilder()) + MapBuilder.new) ..addBuilderFactory( const FullType(BuiltMap, [FullType(String), FullType(String)]), - () => MapBuilder()) + MapBuilder.new) ..addBuilderFactory( const FullType(BuiltMap, [ FullType(BuiltMap, [FullType(int), FullType(String)]), FullType(BuiltMap, [FullType(int), FullType(String)]) ]), - () => MapBuilder, BuiltMap>())) + MapBuilder, BuiltMap>.new)) .build(); group('Serializers with StandardJsonPlugin', () { diff --git a/built_value/test/uint8_list_serializer_test.dart b/built_value/test/uint8_list_serializer_test.dart index ac95e4ff..e36457ae 100644 --- a/built_value/test/uint8_list_serializer_test.dart +++ b/built_value/test/uint8_list_serializer_test.dart @@ -13,37 +13,47 @@ void main() { group('Uint8List with known specifiedType', () { var serialized = - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII='; + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBA' + 'ScY42YAAAAASUVORK5CYII='; var data = base64Decode(serialized); var specifiedType = const FullType(Uint8List); test('can be serialized', () { - expect(serializers.serialize(data, specifiedType: specifiedType), - serialized); + expect( + serializers.serialize(data, specifiedType: specifiedType), + serialized, + ); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); }); group('UInt8List with unknown specifiedType', () { var rawData = - 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII='; + 'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBA' + 'ScY42YAAAAASUVORK5CYII='; var serialized = json.decode(json.encode(['UInt8List', rawData])) as Object; var data = base64Decode(rawData.toString()); var specifiedType = FullType.unspecified; test('can be serialized', () { - var serialized_by = - serializers.serialize(data, specifiedType: specifiedType); - expect(serialized_by, serialized); + var serializedBy = serializers.serialize( + data, + specifiedType: specifiedType, + ); + expect(serializedBy, serialized); }); test('can be deserialized', () { - expect(serializers.deserialize(serialized, specifiedType: specifiedType), - data); + expect( + serializers.deserialize(serialized, specifiedType: specifiedType), + data, + ); }); }); } diff --git a/built_value_generator/analysis_options.yaml b/built_value_generator/analysis_options.yaml index 108d1058..7a4220cb 100644 --- a/built_value_generator/analysis_options.yaml +++ b/built_value_generator/analysis_options.yaml @@ -1 +1,6 @@ -include: package:pedantic/analysis_options.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml + +analyzer: + errors: + lines_longer_than_80_chars: ignore + prefer_interpolation_to_compose_strings: ignore diff --git a/built_value_generator/lib/builder.dart b/built_value_generator/lib/builder.dart index d33c3b85..330b1dec 100644 --- a/built_value_generator/lib/builder.dart +++ b/built_value_generator/lib/builder.dart @@ -3,9 +3,9 @@ // license that can be found in the LICENSE file. import 'package:build/build.dart'; - -import 'package:built_value_generator/built_value_generator.dart'; import 'package:source_gen/source_gen.dart'; +import 'built_value_generator.dart'; + Builder builtValue(BuilderOptions _) => - SharedPartBuilder([BuiltValueGenerator()], 'built_value'); + SharedPartBuilder([const BuiltValueGenerator()], 'built_value'); diff --git a/built_value_generator/lib/built_value_generator.dart b/built_value_generator/lib/built_value_generator.dart index 5f3399c0..d24ba57d 100644 --- a/built_value_generator/lib/built_value_generator.dart +++ b/built_value_generator/lib/built_value_generator.dart @@ -4,12 +4,13 @@ import 'package:analyzer/dart/element/element2.dart'; import 'package:build/build.dart'; -import 'package:built_value_generator/src/enum_source_library.dart'; -import 'package:built_value_generator/src/parsed_library_results.dart'; -import 'package:built_value_generator/src/serializer_source_library.dart'; -import 'package:built_value_generator/src/value_source_class.dart'; import 'package:source_gen/source_gen.dart'; +import 'src/enum_source_library.dart'; +import 'src/parsed_library_results.dart'; +import 'src/serializer_source_library.dart'; +import 'src/value_source_class.dart'; + /// Generator for Enum Class and Built Values. /// /// See https://github.com/google/built_value.dart/tree/master/example diff --git a/built_value_generator/lib/src/dart_types.dart b/built_value_generator/lib/src/dart_types.dart index f922da12..d27e4186 100644 --- a/built_value_generator/lib/src/dart_types.dart +++ b/built_value_generator/lib/src/dart_types.dart @@ -6,8 +6,8 @@ import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:built_collection/built_collection.dart'; -import 'package:built_value_generator/src/parsed_library_results.dart'; -import 'package:built_value_generator/src/value_source_class.dart'; +import 'parsed_library_results.dart'; +import 'value_source_class.dart'; BuiltSet _builtCollectionNames = BuiltSet([ 'BuiltList', @@ -89,14 +89,14 @@ class DartTypes { final parameters = StringBuffer(); parameters.write( - dartType.normalParameterTypes.map((t) => getName(t)).join(', '), + dartType.normalParameterTypes.map(getName).join(', '), ); if (dartType.optionalParameterTypes.isNotEmpty) { if (parameters.isNotEmpty) parameters.write(', '); parameters.write('['); parameters.write( - dartType.optionalParameterTypes.map((t) => getName(t)).join(', '), + dartType.optionalParameterTypes.map(getName).join(', '), ); parameters.write(']'); } @@ -116,7 +116,7 @@ class DartTypes { parameters.write('}'); } - return getName(dartType.returnType) + ' Function($parameters)$suffix'; + return '${getName(dartType.returnType)} Function($parameters)$suffix'; } else if (dartType is InterfaceType) { var typeArguments = dartType.typeArguments; if (typeArguments.isEmpty) { @@ -134,7 +134,7 @@ class DartTypes { } else if (dartType is VoidType) { return 'void'; } else if (dartType.isBottom) { - return 'Never' + suffix; + return 'Never$suffix'; } else { throw UnimplementedError('(${dartType.runtimeType}) $dartType'); } diff --git a/built_value_generator/lib/src/enum_source_class.dart b/built_value_generator/lib/src/enum_source_class.dart index ff2f402f..a3e359e4 100644 --- a/built_value_generator/lib/src/enum_source_class.dart +++ b/built_value_generator/lib/src/enum_source_class.dart @@ -2,19 +2,19 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.enum_source_class; +library; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/dart_types.dart'; -import 'package:built_value_generator/src/enum_source_field.dart'; -import 'package:built_value_generator/src/parsed_library_results.dart'; -import 'package:built_value_generator/src/strings.dart'; import 'package:collection/collection.dart' show IterableExtension; +import 'dart_types.dart'; +import 'enum_source_field.dart'; import 'library_elements.dart'; +import 'parsed_library_results.dart'; +import 'strings.dart'; part 'enum_source_class.g.dart'; @@ -120,9 +120,9 @@ abstract class EnumSourceClass @memoized bool get usesMixin => - element.library2.getClass2(name + 'Mixin') != null || + element.library2.getClass2('${name}Mixin') != null || element.library2.firstFragment.typeAliases2.any( - (a) => a.name2 == name + 'Mixin', + (a) => a.name2 == '${name}Mixin', ); @memoized @@ -187,7 +187,8 @@ abstract class EnumSourceClass ? [] : [ 'Have exactly one constructor: ' - 'const $name._(String name) : super(name); or in Dart>=2.17: const $name._(super.name);', + 'const $name._(String name) : super(name); or in Dart>=2.17: ' + 'const $name._(super.name);', ]; } diff --git a/built_value_generator/lib/src/enum_source_field.dart b/built_value_generator/lib/src/enum_source_field.dart index f3af4684..7d3e3e5c 100644 --- a/built_value_generator/lib/src/enum_source_field.dart +++ b/built_value_generator/lib/src/enum_source_field.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.enum_source_field; +library; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/element/element2.dart'; diff --git a/built_value_generator/lib/src/enum_source_library.dart b/built_value_generator/lib/src/enum_source_library.dart index 8ad35124..0da8de47 100644 --- a/built_value_generator/lib/src/enum_source_library.dart +++ b/built_value_generator/lib/src/enum_source_library.dart @@ -2,16 +2,17 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.enum_source_library; +library; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/enum_source_class.dart'; -import 'package:built_value_generator/src/parsed_library_results.dart'; import 'package:source_gen/source_gen.dart'; +import 'enum_source_class.dart'; +import 'parsed_library_results.dart'; + part 'enum_source_library.g.dart'; abstract class EnumSourceLibrary diff --git a/built_value_generator/lib/src/field_mixin.dart b/built_value_generator/lib/src/field_mixin.dart index 88a835f4..92c2b5bd 100644 --- a/built_value_generator/lib/src/field_mixin.dart +++ b/built_value_generator/lib/src/field_mixin.dart @@ -2,7 +2,7 @@ import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/dart_types.dart'; +import 'dart_types.dart'; /// Common logic between `ValueSourceField` and `SerializerSourceField`. mixin FieldMixin { diff --git a/built_value_generator/lib/src/library_elements.dart b/built_value_generator/lib/src/library_elements.dart index ca4eab29..07da1d9f 100644 --- a/built_value_generator/lib/src/library_elements.dart +++ b/built_value_generator/lib/src/library_elements.dart @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. import 'package:analyzer/dart/element/element2.dart'; +// ignore: implementation_imports import 'package:analyzer/src/dart/analysis/experiments.dart'; /// Tools for [LibraryElement2]s. diff --git a/built_value_generator/lib/src/memoized_getter.dart b/built_value_generator/lib/src/memoized_getter.dart index 02d7f912..23b50cec 100644 --- a/built_value_generator/lib/src/memoized_getter.dart +++ b/built_value_generator/lib/src/memoized_getter.dart @@ -1,11 +1,10 @@ -library built_value_generator.memoized_getter; +library; import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/dart_types.dart'; -import 'package:built_value_generator/src/metadata.dart' - show metadataToStringValue; +import 'dart_types.dart'; +import 'metadata.dart' show metadataToStringValue; part 'memoized_getter.g.dart'; diff --git a/built_value_generator/lib/src/serializer_source_class.dart b/built_value_generator/lib/src/serializer_source_class.dart index 1a7a0d11..ed97c424 100644 --- a/built_value_generator/lib/src/serializer_source_class.dart +++ b/built_value_generator/lib/src/serializer_source_class.dart @@ -2,22 +2,20 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.source_class; - import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/enum_source_class.dart'; -import 'package:built_value_generator/src/enum_source_field.dart'; -import 'package:built_value_generator/src/fields.dart' show collectFields; -import 'package:built_value_generator/src/parsed_library_results.dart'; -import 'package:built_value_generator/src/serializer_source_field.dart'; -import 'package:built_value_generator/src/strings.dart'; -import 'package:built_value_generator/src/value_source_class.dart'; import 'dart_types.dart'; +import 'enum_source_class.dart'; +import 'enum_source_field.dart'; +import 'fields.dart' show collectFields; +import 'parsed_library_results.dart'; +import 'serializer_source_field.dart'; +import 'strings.dart'; +import 'value_source_class.dart'; part 'serializer_source_class.g.dart'; @@ -31,13 +29,11 @@ abstract class SerializerSourceClass factory SerializerSourceClass( ParsedLibraryResults parsedLibraryResults, InterfaceElement2 element, - ) => - _$SerializerSourceClass._( - parsedLibraryResults: parsedLibraryResults, - element: element, - builderElement: - element.library2.getClass2(element.displayName + 'Builder'), - ); + ) => _$SerializerSourceClass._( + parsedLibraryResults: parsedLibraryResults, + element: element, + builderElement: element.library2.getClass2('${element.displayName}Builder'), + ); SerializerSourceClass._(); @@ -104,7 +100,8 @@ abstract class SerializerSourceClass element.fields2.where((field) => field.name3 == 'serializer').toList(); if (serializerFields.isEmpty) return ''; var serializerField = serializerFields.single; - var result = parsedLibrary + var result = + parsedLibrary .getFragmentDeclaration(serializerField.getter2!.firstFragment) ?.node .toSource() ?? @@ -125,19 +122,16 @@ abstract class SerializerSourceClass @memoized BuiltList get genericBounds => BuiltList( - element.typeParameters2.map( - (element) => DartTypes.tryGetName(element.bound) ?? '', - ), - ); + element.typeParameters2.map( + (element) => DartTypes.tryGetName(element.bound) ?? '', + ), + ); @memoized - String get genericBoundsOrObjectString => genericBounds.isEmpty - ? '' - : '<' + - genericBounds - .map((bound) => bound.isEmpty ? 'Object?' : bound) - .join(', ') + - '>'; + String get genericBoundsOrObjectString => + genericBounds.isEmpty + ? '' + : '<${genericBounds.map((bound) => bound.isEmpty ? 'Object?' : bound).join(', ')}>'; String get genericName => '$name$genericBoundsOrObjectString'; @@ -333,15 +327,17 @@ abstract class SerializerSourceClass if (isBuiltValue) { // Add local $cast function if it will be used in code generated by // _generateFieldDeserializers. - var needsCastFn = hasBuilder && + var needsCastFn = + hasBuilder && fields.any( (f) => f.builderFieldUsesNestedBuilder && f.builderFieldIsNullable, ); - var maybeCastFn = needsCastFn - ? r''' + var maybeCastFn = + needsCastFn + ? r''' T $cast(dynamic any) => any as T; ''' - : ''; + : ''; return ''' class $serializerImplName implements StructuredSerializer<$genericName> { @@ -389,13 +385,13 @@ class $serializerImplName implements StructuredSerializer<$genericName> { (b) => element.fields2 .where((field) => field.isConst && field.isStatic) .forEach((field) { - final enumSourceField = EnumSourceField(parsedLibrary, field); - if (enumSourceField.settings.wireName != null) { - b[field.name3!] = enumSourceField.settings.wireName!; - } else if (enumSourceField.settings.wireNumber != null) { - b[field.name3!] = enumSourceField.settings.wireNumber!; - } - }), + final enumSourceField = EnumSourceField(parsedLibrary, field); + if (enumSourceField.settings.wireName != null) { + b[field.name3!] = enumSourceField.settings.wireName!; + } else if (enumSourceField.settings.wireNumber != null) { + b[field.name3!] = enumSourceField.settings.wireNumber!; + } + }), ); if (wireNameMapping.isEmpty) { @@ -477,14 +473,14 @@ class $serializerImplName implements PrimitiveSerializer<$genericName> { } BuiltList get _genericParametersUsedInFields => BuiltList( - genericParameters.where( - (parameter) => fields.any( - (field) => - field.rawType == parameter || - field.type.contains(RegExp('[<, \n]$parameter[>, \n]')), - ), - ), - ); + genericParameters.where( + (parameter) => fields.any( + (field) => + field.rawType == parameter || + field.type.contains(RegExp('[<, \n]$parameter[>, \n]')), + ), + ), + ); String _generateGenericsSerializerPreamble() { var parameters = _genericParametersUsedInFields; @@ -514,7 +510,8 @@ class $serializerImplName implements PrimitiveSerializer<$genericName> { return fields .where((field) => !field.isNullable) .map( - (field) => "'${escapeString(field.wireName)}', " + (field) => + "'${escapeString(field.wireName)}', " 'serializers.serialize(object.${field.name}, ' 'specifiedType: ' '${field.generateFullType(libraryFragment, genericParameters.toBuiltSet())}),', @@ -527,20 +524,22 @@ class $serializerImplName implements PrimitiveSerializer<$genericName> { if (nullableFields.isEmpty) return ''; return 'Object? value;' + - nullableFields.map((field) { - var serializeField = '''serializers.serialize( + nullableFields + .map((field) { + var serializeField = '''serializers.serialize( value, specifiedType: ${field.generateFullType(libraryFragment, genericParameters.toBuiltSet())})'''; - return ''' + return ''' value = object.${field.name}; ${serializerSettings.serializeNulls ? '' : 'if (value != null) {'} result ..add('${escapeString(field.wireName)}') ..add($serializeField); ${serializerSettings.serializeNulls ? '' : '}'}'''; - }).join(''); + }) + .join(''); } /// Gets a map from generic parameter to its bound. @@ -557,20 +556,21 @@ class $serializerImplName implements PrimitiveSerializer<$genericName> { } String _generateFieldDeserializers() { - return fields.map((field) { - final fullType = field.generateFullType( - libraryFragment, - genericParameters.toBuiltSet(), - ); - final cast = field.generateCast(libraryFragment, _genericBoundsAsMap); - // If cast exists and is not nullable. - var maybeNotNull = !field.isNullable && cast.isNotEmpty ? '!' : ''; - if (field.builderFieldUsesNestedBuilder) { - if (hasBuilder && field.builderFieldIsNullable) { - // The manually implemented builder might or might not return a - // builder. If it does, use `replace` as usual. If not, use `$cast` - // to avoid computing a new type of static cast. - return ''' + return fields + .map((field) { + final fullType = field.generateFullType( + libraryFragment, + genericParameters.toBuiltSet(), + ); + final cast = field.generateCast(libraryFragment, _genericBoundsAsMap); + // If cast exists and is not nullable. + var maybeNotNull = !field.isNullable && cast.isNotEmpty ? '!' : ''; + if (field.builderFieldUsesNestedBuilder) { + if (hasBuilder && field.builderFieldIsNullable) { + // The manually implemented builder might or might not return a + // builder. If it does, use `replace` as usual. If not, use `$cast` + // to avoid computing a new type of static cast. + return ''' case '${escapeString(field.wireName)}': var maybeBuilder = result.${field.name}; var fieldValue = serializers.deserialize( @@ -582,38 +582,39 @@ case '${escapeString(field.wireName)}': } break; '''; - } else if (field.builderFieldAutoCreatesNestedBuilder) { - // Use a looser cast where possible for calls to `replace`. - final looseCast = field.generateCast( - libraryFragment, - _genericBoundsAsMap, - forReplace: true, - ); - return ''' + } else if (field.builderFieldAutoCreatesNestedBuilder) { + // Use a looser cast where possible for calls to `replace`. + final looseCast = field.generateCast( + libraryFragment, + _genericBoundsAsMap, + forReplace: true, + ); + return ''' case '${escapeString(field.wireName)}': result.${field.name}.replace(serializers.deserialize( value, specifiedType: $fullType)! $looseCast); break; '''; - } else { - return ''' + } else { + return ''' case '${escapeString(field.wireName)}': result.${field.name} = (serializers.deserialize( value, specifiedType: $fullType)$maybeNotNull $cast).toBuilder(); break; '''; - } - } else { - // `cast` is empty if no cast is needed. - var maybeOrNull = field.isNullable && cast.isNotEmpty ? '?' : ''; - return ''' + } + } else { + // `cast` is empty if no cast is needed. + var maybeOrNull = field.isNullable && cast.isNotEmpty ? '?' : ''; + return ''' case '${escapeString(field.wireName)}': result.${field.name} = serializers.deserialize( value, specifiedType: $fullType)$maybeNotNull $cast$maybeOrNull; break; '''; - } - }).join(''); + } + }) + .join(''); } static String _toCamelCase(String name) { @@ -626,9 +627,10 @@ case '${escapeString(field.wireName)}': } else if (char == '\$') { result += '\$'; } else { - result += firstCharacter - ? char.toLowerCase() - : (upperCase ? char.toUpperCase() : char); + result += + firstCharacter + ? char.toLowerCase() + : (upperCase ? char.toUpperCase() : char); upperCase = false; firstCharacter = false; } diff --git a/built_value_generator/lib/src/serializer_source_field.dart b/built_value_generator/lib/src/serializer_source_field.dart index fb101e17..0fc1fd55 100644 --- a/built_value_generator/lib/src/serializer_source_field.dart +++ b/built_value_generator/lib/src/serializer_source_field.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.source_field; +library; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; @@ -11,12 +11,11 @@ import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/dart_types.dart'; -import 'package:built_value_generator/src/field_mixin.dart'; -import 'package:built_value_generator/src/metadata.dart' - show metadataToStringValue; -import 'package:built_value_generator/src/parsed_library_results.dart'; -import 'package:built_value_generator/src/strings.dart'; +import 'dart_types.dart'; +import 'field_mixin.dart'; +import 'metadata.dart' show metadataToStringValue; +import 'parsed_library_results.dart'; +import 'strings.dart'; part 'serializer_source_field.g.dart'; diff --git a/built_value_generator/lib/src/serializer_source_library.dart b/built_value_generator/lib/src/serializer_source_library.dart index d6e5bd38..5249d062 100644 --- a/built_value_generator/lib/src/serializer_source_library.dart +++ b/built_value_generator/lib/src/serializer_source_library.dart @@ -2,17 +2,17 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.source_library; +library; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/element/element2.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/parsed_library_results.dart'; -import 'package:built_value_generator/src/serializer_source_class.dart'; import 'package:source_gen/source_gen.dart'; import 'dart_types.dart'; +import 'parsed_library_results.dart'; +import 'serializer_source_class.dart'; part 'serializer_source_library.g.dart'; @@ -24,11 +24,10 @@ abstract class SerializerSourceLibrary factory SerializerSourceLibrary( ParsedLibraryResults parsedLibraryResults, LibraryElement2 element, - ) => - _$SerializerSourceLibrary._( - parsedLibraryResults: parsedLibraryResults, - element: element, - ); + ) => _$SerializerSourceLibrary._( + parsedLibraryResults: parsedLibraryResults, + element: element, + ); SerializerSourceLibrary._(); @memoized @@ -43,24 +42,27 @@ abstract class SerializerSourceLibrary @memoized BuiltMap get serializersForAnnotations { var result = MapBuilder(); - var accessors = element.library2.topLevelVariables - .where( - (element) => - element.getter2 != null && - DartTypes.getName(element.getter2!.returnType) == 'Serializers', - ) - .toList(); + var accessors = + element.library2.topLevelVariables + .where( + (element) => + element.getter2 != null && + DartTypes.getName(element.getter2!.returnType) == + 'Serializers', + ) + .toList(); for (var accessor in accessors) { - final annotations = accessor.metadata2.annotations - .where( - (annotation) => - DartTypes.tryGetName( - annotation.computeConstantValue()?.type, - ) == - 'SerializersFor', - ) - .toList(); + final annotations = + accessor.metadata2.annotations + .where( + (annotation) => + DartTypes.tryGetName( + annotation.computeConstantValue()?.type, + ) == + 'SerializersFor', + ) + .toList(); if (annotations.isEmpty) continue; result[accessor.name3!] = annotations.single; @@ -74,24 +76,27 @@ abstract class SerializerSourceLibrary @memoized BuiltList get wrongSerializersDeclarations { var result = ListBuilder(); - var accessors = element.topLevelVariables - .where( - (element) => - element.getter2 != null && - DartTypes.getName(element.getter2!.returnType) != 'Serializers', - ) - .toList(); + var accessors = + element.topLevelVariables + .where( + (element) => + element.getter2 != null && + DartTypes.getName(element.getter2!.returnType) != + 'Serializers', + ) + .toList(); for (var accessor in accessors) { - final annotations = accessor.metadata2.annotations - .where( - (annotation) => - DartTypes.tryGetName( - annotation.computeConstantValue()?.type, - ) == - 'SerializersFor', - ) - .toList(); + final annotations = + accessor.metadata2.annotations + .where( + (annotation) => + DartTypes.tryGetName( + annotation.computeConstantValue()?.type, + ) == + 'SerializersFor', + ) + .toList(); if (annotations.isEmpty) continue; result.add(accessor.name3!); @@ -158,7 +163,7 @@ abstract class SerializerSourceLibrary /// transitive set of serializable classes implied by `serializeForClasses`. @memoized BuiltSetMultimap - get serializeForTransitiveClasses { + get serializeForTransitiveClasses { var result = SetMultimapBuilder(); for (var field in serializersForAnnotations.keys) { @@ -172,14 +177,14 @@ abstract class SerializerSourceLibrary while (currentResult != expandedResult) { currentResult = expandedResult ?? currentResult; expandedResult = currentResult.rebuild( - (b) => b - ..addAll( - currentResult.expand( - (sourceClass) => sourceClass.fieldClasses.where( - (fieldClass) => fieldClass.isSerializable, + (b) => + b..addAll( + currentResult.expand( + (sourceClass) => sourceClass.fieldClasses.where( + (fieldClass) => fieldClass.isSerializable, + ), ), ), - ), ); } diff --git a/built_value_generator/lib/src/value_source_class.dart b/built_value_generator/lib/src/value_source_class.dart index ddd8a861..b76d96d8 100644 --- a/built_value_generator/lib/src/value_source_class.dart +++ b/built_value_generator/lib/src/value_source_class.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.source_class; +library; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; @@ -11,17 +11,17 @@ import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/fixes.dart'; -import 'package:built_value_generator/src/memoized_getter.dart'; -import 'package:built_value_generator/src/metadata.dart'; -import 'package:built_value_generator/src/parsed_library_results.dart'; -import 'package:built_value_generator/src/strings.dart'; -import 'package:built_value_generator/src/value_source_field.dart'; import 'package:collection/collection.dart'; import 'package:source_gen/source_gen.dart'; import 'dart_types.dart'; +import 'fixes.dart'; import 'library_elements.dart'; +import 'memoized_getter.dart'; +import 'metadata.dart'; +import 'parsed_library_results.dart'; +import 'strings.dart'; +import 'value_source_field.dart'; part 'value_source_class.g.dart'; @@ -38,11 +38,10 @@ abstract class ValueSourceClass factory ValueSourceClass( ParsedLibraryResults parsedLibraryResults, InterfaceElement2 element, - ) => - _$ValueSourceClass._( - parsedLibraryResults: parsedLibraryResults, - element: element, - ); + ) => _$ValueSourceClass._( + parsedLibraryResults: parsedLibraryResults, + element: element, + ); ValueSourceClass._(); @memoized @@ -55,9 +54,10 @@ abstract class ValueSourceClass /// Returns `mixin class` if class modifiers are available, `class` otherwise. /// /// The two are equivalent as class modifiers change the meaning of `class`. - String get _class => LibraryElements.areClassMixinsEnabled(element.library2) - ? 'mixin class' - : 'class'; + String get _class => + LibraryElements.areClassMixinsEnabled(element.library2) + ? 'mixin class' + : 'class'; /// Returns the class name for the generated implementation. If the manually /// maintained class is private then we ignore the underscore here, to avoid @@ -68,7 +68,7 @@ abstract class ValueSourceClass @memoized ClassElement2? get builderElement { - var result = element.library2.getClass2(name + 'Builder'); + var result = element.library2.getClass2('${name}Builder'); if (result == null) return null; // If the builder is in a generated file, then we're analyzing _after_ code // generation. Ignore it. This happens when running as an analyzer plugin. @@ -80,8 +80,8 @@ abstract class ValueSourceClass @memoized bool get implementsBuilt => element.allSupertypes.any( - (interfaceType) => interfaceType.element3.name3 == 'Built', - ); + (interfaceType) => interfaceType.element3.name3 == 'Built', + ); @memoized bool get extendsIsAllowed { @@ -149,10 +149,10 @@ abstract class ValueSourceClass annotation.getField('nestedBuilders')?.toBoolValue() ?? true, autoCreateNestedBuilders: annotation.getField('autoCreateNestedBuilders')?.toBoolValue() ?? - true, + true, generateBuilderOnSetField: annotation.getField('generateBuilderOnSetField')?.toBoolValue() ?? - false, + false, defaultCompare: annotation.getField('defaultCompare')?.toBoolValue() ?? true, defaultSerialize: @@ -167,15 +167,15 @@ abstract class ValueSourceClass @memoized BuiltList get genericBounds => BuiltList( - element.typeParameters2.map((element) { - var bound = element.bound; - if (bound == null) return ''; - return DartTypes.getName(bound) + - (element.bound!.nullabilitySuffix == NullabilitySuffix.question - ? '?' - : ''); - }), - ); + element.typeParameters2.map((element) { + var bound = element.bound; + if (bound == null) return ''; + return DartTypes.getName(bound) + + (element.bound!.nullabilitySuffix == NullabilitySuffix.question + ? '?' + : ''); + }), + ); @memoized ClassDeclaration get classDeclaration { @@ -231,18 +231,18 @@ abstract class ValueSourceClass .where((interfaceType) => interfaceType.element3.name3 == 'Builder') .single .typeArguments - .map((type) => DartTypes.getName(type)) + .map(DartTypes.getName) .join(', '); } @memoized BuiltList get fields => ValueSourceField.fromClassElements( - parsedLibraryResults, - settings, - parsedLibrary, - element, - builderElement, - ); + parsedLibraryResults, + settings, + parsedLibrary, + element, + builderElement, + ); @memoized String get source => element.library2.firstFragment.source.contents.data; @@ -295,19 +295,25 @@ abstract class ValueSourceClass !constructor.isFactory && !constructor.isSynthetic, ) .map( - (constructor) => parsedLibrary - .getFragmentDeclaration(constructor.firstFragment)! - .node as ConstructorDeclaration, + (constructor) => + parsedLibrary + .getFragmentDeclaration(constructor.firstFragment)! + .node + as ConstructorDeclaration, ), ); @memoized BuiltList get valueClassFactories => BuiltList( - element.constructors2.where((constructor) => constructor.isFactory).map( - (factory) => parsedLibrary - .getFragmentDeclaration(factory.firstFragment)! - .node as ConstructorDeclaration, + element.constructors2 + .where((constructor) => constructor.isFactory) + .map( + (factory) => + parsedLibrary + .getFragmentDeclaration(factory.firstFragment)! + .node + as ConstructorDeclaration, ), ); @@ -316,30 +322,31 @@ abstract class ValueSourceClass @memoized BuiltList get builderClassConstructors => BuiltList( - builderElement!.constructors2 - .where( - (constructor) => - !constructor.isFactory && !constructor.isSynthetic, - ) - .map( - (constructor) => parsedLibrary + builderElement!.constructors2 + .where( + (constructor) => !constructor.isFactory && !constructor.isSynthetic, + ) + .map( + (constructor) => + parsedLibrary .getFragmentDeclaration(constructor.firstFragment)! .node .toSource(), - ), - ); + ), + ); @memoized BuiltList get builderClassFactories => BuiltList( - builderElement!.constructors2 - .where((constructor) => constructor.isFactory) - .map( - (factory) => parsedLibrary + builderElement!.constructors2 + .where((constructor) => constructor.isFactory) + .map( + (factory) => + parsedLibrary .getFragmentDeclaration(factory.firstFragment)! .node .toSource(), - ), - ); + ), + ); @memoized BuiltList get memoizedGetters => @@ -353,32 +360,32 @@ abstract class ValueSourceClass /// builder implements the corresponding builders. @memoized BuiltList get builderImplements => BuiltList.build( - (b) => b + (b) => + b ..add('Builder<$name$_generics, ${name}Builder$_generics>') ..addAll( element.interfaces .where((interface) => needsBuiltValue(interface.element3)) .map(_parentBuilderInterfaceName), ), - ); + ); /// Returns the `with` clause for the builder. /// /// If the value class mixes in other value classes, the builder mixes in /// the corresponding builders. @memoized - BuiltList get builderMixins => element.mixins - .where((interface) => needsBuiltValue(interface.element3)) - .map(_parentBuilderInterfaceName) - .toBuiltList(); + BuiltList get builderMixins => + element.mixins + .where((interface) => needsBuiltValue(interface.element3)) + .map(_parentBuilderInterfaceName) + .toBuiltList(); String _parentBuilderInterfaceName(InterfaceType interface) { final displayName = DartTypes.getName(interface); - if (!displayName.contains('<')) return displayName + 'Builder'; + if (!displayName.contains('<')) return '${displayName}Builder'; final index = displayName.indexOf('<'); - return displayName.substring(0, index) + - 'Builder' + - displayName.substring(index); + return '${displayName.substring(0, index)}Builder${displayName.substring(index)}'; } bool get _implementsParentBuilder => @@ -446,21 +453,23 @@ abstract class ValueSourceClass if (directives.isEmpty) { return [ GeneratorError( - (b) => b - ..message = 'Import generated part: $partStatement' - ..offset = 0 - ..length = 0 - ..fix = '$partStatement\n\n', + (b) => + b + ..message = 'Import generated part: $partStatement' + ..offset = 0 + ..length = 0 + ..fix = '$partStatement\n\n', ), ]; } else { return [ GeneratorError( - (b) => b - ..message = 'Import generated part: $partStatement' - ..offset = directives.last.offset + directives.last.length - ..length = 0 - ..fix = '\n\n$partStatement\n\n', + (b) => + b + ..message = 'Import generated part: $partStatement' + ..offset = directives.last.offset + directives.last.length + ..length = 0 + ..fix = '\n\n$partStatement\n\n', ), ]; } @@ -473,9 +482,11 @@ abstract class ValueSourceClass if (settings.comparableBuilders && settings.nestedBuilders) { return [ GeneratorError( - (b) => b - ..message = 'Set `nestedBuilders: false`' - ' in order to use `comparableBuilders: true`.', + (b) => + b + ..message = + 'Set `nestedBuilders: false`' + ' in order to use `comparableBuilders: true`.', ), ]; } else { @@ -489,11 +500,12 @@ abstract class ValueSourceClass if (!valueClassIsAbstract) { result.add( GeneratorError( - (b) => b - ..message = 'Make class abstract.' - ..offset = classDeclaration.offset - ..length = 0 - ..fix = 'abstract ', + (b) => + b + ..message = 'Make class abstract.' + ..offset = classDeclaration.offset + ..length = 0 + ..fix = 'abstract ', ), ); } @@ -501,10 +513,12 @@ abstract class ValueSourceClass if (hasBuiltValueImportWithShow) { result.add( GeneratorError( - (b) => b - ..message = 'Stop using "show" when importing ' - '"package:built_value/built_value.dart". It prevents the ' - 'generated code from finding helper methods.', + (b) => + b + ..message = + 'Stop using "show" when importing ' + '"package:built_value/built_value.dart". It prevents the ' + 'generated code from finding helper methods.', ), ); } @@ -512,10 +526,12 @@ abstract class ValueSourceClass if (hasBuiltValueImportWithAs) { result.add( GeneratorError( - (b) => b - ..message = 'Stop using "as" when importing ' - '"package:built_value/built_value.dart". It prevents the generated ' - 'code from finding helper methods.', + (b) => + b + ..message = + 'Stop using "as" when importing ' + '"package:built_value/built_value.dart". It prevents the generated ' + 'code from finding helper methods.', ), ); } @@ -523,7 +539,8 @@ abstract class ValueSourceClass var implementsClause = classDeclaration.implementsClause; var expectedInterface = 'Built<$name$_generics, ${name}Builder$_generics>'; - var implementsClauseIsCorrect = implementsClause != null && + var implementsClauseIsCorrect = + implementsClause != null && implementsClause.interfaces.any( (type) => type.toSource() == expectedInterface, ); @@ -533,7 +550,8 @@ abstract class ValueSourceClass // case of the `Built` interface being implemented. This is to allow // omitting the `Built` interface to work around having to implement the // same interface twice with different type parameters. - var implementsClauseIsAllowedToBeIncorrect = !settings.instantiable && + var implementsClauseIsAllowedToBeIncorrect = + !settings.instantiable && (implementsClause == null || !implementsClause.interfaces.any( (type) => @@ -545,32 +563,35 @@ abstract class ValueSourceClass if (implementsClause == null) { result.add( GeneratorError( - (b) => b - ..message = 'Make class implement $expectedInterface.' - ..offset = classDeclaration.leftBracket.offset - 1 - ..length = 0 - ..fix = 'implements $expectedInterface', + (b) => + b + ..message = 'Make class implement $expectedInterface.' + ..offset = classDeclaration.leftBracket.offset - 1 + ..length = 0 + ..fix = 'implements $expectedInterface', ), ); } else { var found = false; - final interfaces = implementsClause.interfaces.map((type) { - if (type.name2.lexeme == 'Built') { - found = true; - return expectedInterface; - } else { - return type.toSource(); - } - }).toList(); + final interfaces = + implementsClause.interfaces.map((type) { + if (type.name2.lexeme == 'Built') { + found = true; + return expectedInterface; + } else { + return type.toSource(); + } + }).toList(); if (!found) interfaces.add(expectedInterface); result.add( GeneratorError( - (b) => b - ..message = 'Make class implement $expectedInterface.' - ..offset = implementsClause.offset - ..length = implementsClause.length - ..fix = 'implements ${interfaces.join(", ")}', + (b) => + b + ..message = 'Make class implement $expectedInterface.' + ..offset = implementsClause.offset + ..length = implementsClause.length + ..fix = 'implements ${interfaces.join(", ")}', ), ); } @@ -579,9 +600,11 @@ abstract class ValueSourceClass if (!extendsIsAllowed) { result.add( GeneratorError( - (b) => b - ..message = 'Stop class extending other classes. ' - 'Only "implements" and "extends Object with" are allowed.', + (b) => + b + ..message = + 'Stop class extending other classes. ' + 'Only "implements" and "extends Object with" are allowed.', ), ); } @@ -591,16 +614,18 @@ abstract class ValueSourceClass method.returnType is VoidType && method.formalParameters.length == 1 && parsedLibrary - .getFragmentDeclaration( - method.formalParameters[0].firstFragment, - )! - .node is SimpleFormalParameter && + .getFragmentDeclaration( + method.formalParameters[0].firstFragment, + )! + .node + is SimpleFormalParameter && DartTypes.stripGenerics( (parsedLibrary - .getFragmentDeclaration( - method.formalParameters[0].firstFragment, - )! - .node as SimpleFormalParameter) + .getFragmentDeclaration( + method.formalParameters[0].firstFragment, + )! + .node + as SimpleFormalParameter) .type! .toSource(), ) == @@ -612,19 +637,23 @@ abstract class ValueSourceClass if (!isStaticBuilderHook(builderInitializer!)) { result.add( GeneratorError( - (b) => b - ..message = 'Fix _initializeBuilder signature: ' - 'static void _initializeBuilder(${name}Builder b)', + (b) => + b + ..message = + 'Fix _initializeBuilder signature: ' + 'static void _initializeBuilder(${name}Builder b)', ), ); } if (hooks.containsKey('_initializeBuilder')) { result.add( GeneratorError( - (b) => b - ..message = 'Remove @BuiltValueHook from _initializeBuilder. ' - 'It is a magic method name that is always a hook. ' - 'Or, to use the annotation, please rename the method.', + (b) => + b + ..message = + 'Remove @BuiltValueHook from _initializeBuilder. ' + 'It is a magic method name that is always a hook. ' + 'Or, to use the annotation, please rename the method.', ), ); } @@ -633,19 +662,23 @@ abstract class ValueSourceClass if (!isStaticBuilderHook(builderFinalizer!)) { result.add( GeneratorError( - (b) => b - ..message = 'Fix _finalizeBuilder signature: ' - 'static void _finalizeBuilder(${name}Builder b)', + (b) => + b + ..message = + 'Fix _finalizeBuilder signature: ' + 'static void _finalizeBuilder(${name}Builder b)', ), ); } if (hooks.containsKey('_finalizeBuilder')) { result.add( GeneratorError( - (b) => b - ..message = 'Remove @BuiltValueHook from _finalizeBuilder. ' - 'It is a magic method name that is always a hook. ' - 'Or, to use the annotation, please rename the method.', + (b) => + b + ..message = + 'Remove @BuiltValueHook from _finalizeBuilder. ' + 'It is a magic method name that is always a hook. ' + 'Or, to use the annotation, please rename the method.', ), ); } @@ -660,9 +693,10 @@ abstract class ValueSourceClass if (!isStaticBuilderHook(method)) { result.add( GeneratorError( - (b) => b - ..message = - 'Fix ${hook.key} signature to use it with @BuiltValueHook: ' + (b) => + b + ..message = + 'Fix ${hook.key} signature to use it with @BuiltValueHook: ' 'static void ${hook.key}(${name}Builder b)', ), ); @@ -673,12 +707,13 @@ abstract class ValueSourceClass if (valueClassConstructors.isEmpty) { result.add( GeneratorError( - (b) => b - ..message = - 'Make class have exactly one constructor: $expectedConstructor;' - ..offset = classDeclaration.rightBracket.offset - ..length = 0 - ..fix = ' $expectedConstructor;\n', + (b) => + b + ..message = + 'Make class have exactly one constructor: $expectedConstructor;' + ..offset = classDeclaration.rightBracket.offset + ..length = 0 + ..fix = ' $expectedConstructor;\n', ), ); } else if (valueClassConstructors.length > 1) { @@ -689,11 +724,12 @@ abstract class ValueSourceClass } else { result.add( GeneratorError( - (b) => b - ..message = 'Remove invalid constructor.' - ..offset = constructor.offset - ..length = constructor.length - ..fix = '', + (b) => + b + ..message = 'Remove invalid constructor.' + ..offset = constructor.offset + ..length = constructor.length + ..fix = '', ), ); } @@ -701,26 +737,28 @@ abstract class ValueSourceClass if (!found) { result.add( GeneratorError( - (b) => b - ..message = - 'Make class have exactly one constructor: $expectedConstructor;' - ..offset = classDeclaration.rightBracket.offset - ..length = 0 - ..fix = ' $expectedConstructor;\n', + (b) => + b + ..message = + 'Make class have exactly one constructor: $expectedConstructor;' + ..offset = classDeclaration.rightBracket.offset + ..length = 0 + ..fix = ' $expectedConstructor;\n', ), ); } - } else if (!(valueClassConstructors.single.toSource().contains( - expectedConstructor, - ))) { + } else if (!valueClassConstructors.single.toSource().contains( + expectedConstructor, + )) { result.add( GeneratorError( - (b) => b - ..message = - 'Make class have exactly one constructor: $expectedConstructor' - ..offset = valueClassConstructors.single.offset - ..length = valueClassConstructors.single.length - ..fix = expectedConstructor + ';', + (b) => + b + ..message = + 'Make class have exactly one constructor: $expectedConstructor' + ..offset = valueClassConstructors.single.offset + ..length = valueClassConstructors.single.length + ..fix = '$expectedConstructor;', ), ); } @@ -728,9 +766,10 @@ abstract class ValueSourceClass if (valueClassConstructors.isNotEmpty) { result.add( GeneratorError( - (b) => b - ..message = - 'Remove all constructors or remove "instantiable: false".', + (b) => + b + ..message = + 'Remove all constructors or remove "instantiable: false".', ), ); } @@ -740,18 +779,20 @@ abstract class ValueSourceClass if (!valueClassFactories.any( (factory) => factory.toSource().contains('$implName$_generics'), )) { - final exampleFactory = 'factory $name(' + final exampleFactory = + 'factory $name(' '[void Function(${name}Builder$_generics)? updates]) = ' '$implName$_generics;'; result.add( GeneratorError( - (b) => b - ..message = - 'Add a factory so your class can be instantiated. Example:\n\n' + (b) => + b + ..message = + 'Add a factory so your class can be instantiated. Example:\n\n' '$exampleFactory' - ..offset = classDeclaration.rightBracket.offset - ..length = 0 - ..fix = ' $exampleFactory\n', + ..offset = classDeclaration.rightBracket.offset + ..length = 0 + ..fix = ' $exampleFactory\n', ), ); } @@ -759,9 +800,10 @@ abstract class ValueSourceClass if (valueClassFactories.isNotEmpty) { result.add( GeneratorError( - (b) => b - ..message = - 'Remove all factories or remove "instantiable: false".', + (b) => + b + ..message = + 'Remove all factories or remove "instantiable: false".', ), ); } @@ -770,9 +812,10 @@ abstract class ValueSourceClass if (implementsHashCode) { result.add( GeneratorError( - (b) => b - ..message = - 'Stop implementing hashCode; it will be generated for you.', + (b) => + b + ..message = + 'Stop implementing hashCode; it will be generated for you.', ), ); } @@ -780,9 +823,10 @@ abstract class ValueSourceClass if (implementsOperatorEquals) { result.add( GeneratorError( - (b) => b - ..message = - 'Stop implementing operator==; it will be generated for you.', + (b) => + b + ..message = + 'Stop implementing operator==; it will be generated for you.', ), ); } @@ -806,9 +850,10 @@ abstract class ValueSourceClass if (builderParameters != expectedBuilderParameters) { result.add( GeneratorError( - (b) => b - ..message = - 'Make builder class implement Builder<$expectedBuilderParameters>. ' + (b) => + b + ..message = + 'Make builder class implement Builder<$expectedBuilderParameters>. ' 'Currently: Builder<$builderParameters>', ), ); @@ -818,12 +863,13 @@ abstract class ValueSourceClass if (settings.instantiable) { final expectedConstructor = '${name}Builder._()'; if (builderClassConstructors.length != 1 || - !(builderClassConstructors.single.contains(expectedConstructor))) { + !builderClassConstructors.single.contains(expectedConstructor)) { result.add( GeneratorError( - (b) => b - ..message = - 'Make builder class have exactly one constructor: $expectedConstructor;', + (b) => + b + ..message = + 'Make builder class have exactly one constructor: $expectedConstructor;', ), ); } @@ -831,9 +877,11 @@ abstract class ValueSourceClass if (builderClassConstructors.isNotEmpty) { result.add( GeneratorError( - (b) => b - ..message = 'Remove all builder constructors ' - 'or remove "instantiable: false".', + (b) => + b + ..message = + 'Remove all builder constructors ' + 'or remove "instantiable: false".', ), ); } @@ -846,9 +894,10 @@ abstract class ValueSourceClass !builderClassFactories.single.contains(expectedFactory)) { result.add( GeneratorError( - (b) => b - ..message = - 'Make builder class have exactly one factory: $expectedFactory', + (b) => + b + ..message = + 'Make builder class have exactly one factory: $expectedFactory', ), ); } @@ -856,9 +905,10 @@ abstract class ValueSourceClass if (builderClassFactories.isNotEmpty) { result.add( GeneratorError( - (b) => b - ..message = - 'Remove all builder factories or remove "instantiable: false".', + (b) => + b + ..message = + 'Remove all builder factories or remove "instantiable: false".', ), ); } @@ -871,27 +921,28 @@ abstract class ValueSourceClass if (!hasBuilder || !settings.instantiable) return []; return fields.any((field) => !field.builderFieldExists) ? [ - GeneratorError( - (b) => b - ..message = 'Make builder have exactly these fields: ' + - fields.map((field) => field.name).join(', '), - ), - ] + GeneratorError( + (b) => + b + ..message = + 'Make builder have exactly these fields: ' + + fields.map((field) => field.name).join(', '), + ), + ] : []; } String get _generics => - genericParameters.isEmpty ? '' : '<' + genericParameters.join(', ') + '>'; + genericParameters.isEmpty ? '' : '<${genericParameters.join(', ')}>'; - String get _boundedGenerics => genericParameters.isEmpty - ? '' - : '<' + - IterableZip([genericParameters, genericBounds]).map((zipped) { + String get _boundedGenerics => + genericParameters.isEmpty + ? '' + : '<${IterableZip([genericParameters, genericBounds]).map((zipped) { final parameter = zipped[0]; final bound = zipped[1]; return bound.isEmpty ? parameter : '$parameter extends $bound'; - }).join(', ') + - '>'; + }).join(', ')}>'; String generateCode() { var errors = computeErrors(); @@ -957,10 +1008,12 @@ abstract class ValueSourceClass } else { result.write('$implName._({'); result.write( - fields.map((field) { - var maybeRequired = field.isNullable ? '' : 'required '; - return '${maybeRequired}this.${field.name}'; - }).join(', '), + fields + .map((field) { + var maybeRequired = field.isNullable ? '' : 'required '; + return '${maybeRequired}this.${field.name}'; + }) + .join(', '), ); result.write('}) : super._();'); } @@ -1071,25 +1124,29 @@ abstract class ValueSourceClass late final String type; if (field.isNestedBuilder) { - type = hasBuilder - ? field.builderElementTypeWithPrefix - : field.typeInBuilder(libraryFragment)!; + type = + hasBuilder + ? field.builderElementTypeWithPrefix + : field.typeInBuilder(libraryFragment)!; } else { type = field.typeInLibraryFragment(libraryFragment); } final name = field.name; - final isNullableNestedBuilder = field.isAutoCreateNestedBuilder && + final isNullableNestedBuilder = + field.isAutoCreateNestedBuilder && field.isNestedBuilder && (!hasBuilder || field.builderElementSetterIsNullable); - final hasNullableSetter = !hasBuilder || + final hasNullableSetter = + !hasBuilder || isNullableNestedBuilder || field.builderElementSetterIsNullable; - final getterMaybeOrNull = hasNullableSetter && - (!field.isNestedBuilder || !field.isAutoCreateNestedBuilder) - ? '?' - : ''; + final getterMaybeOrNull = + hasNullableSetter && + (!field.isNestedBuilder || !field.isAutoCreateNestedBuilder) + ? '?' + : ''; final setterMaybeOrNull = hasNullableSetter ? '?' : ''; final maybeLate = !hasNullableSetter ? 'late ' : ''; @@ -1240,7 +1297,7 @@ abstract class ValueSourceClass var fieldBuilders = {}; var needsNullCheck = {}; var genericFields = {}; - fields.forEach((field) { + for (var field in fields) { final name = field.name; if (!field.isNestedBuilder) { fieldBuilders[name] = name; @@ -1265,7 +1322,7 @@ abstract class ValueSourceClass fieldBuilders[name] = '_$name?.build()'; if (!field.isNullable) needsNullCheck.add(name); } - }); + } // If there are nested builders then wrap the build in a try/catch so we // can add information should a nested builder fail. @@ -1310,11 +1367,13 @@ abstract class ValueSourceClass result.writeln('late String _\$failedField;'); result.writeln('try {'); result.write( - fieldBuilders.keys.map((field) { - final fieldBuilder = fieldBuilders[field]; - if (fieldBuilder == field) return ''; - return "_\$failedField = '${escapeString(field)}'; $fieldBuilder;"; - }).join('\n'), + fieldBuilders.keys + .map((field) { + final fieldBuilder = fieldBuilders[field]; + if (fieldBuilder == field) return ''; + return "_\$failedField = '${escapeString(field)}'; $fieldBuilder;"; + }) + .join('\n'), ); result.writeln('} catch (e) {'); @@ -1344,11 +1403,13 @@ abstract class ValueSourceClass String _generateEqualsAndHashcode({bool forBuilder = false}) { var result = StringBuffer(); - var comparedFields = fields - .where( - (field) => field.builtValueField.compare ?? settings.defaultCompare, - ) - .toList(); + var comparedFields = + fields + .where( + (field) => + field.builtValueField.compare ?? settings.defaultCompare, + ) + .toList(); var comparedFunctionFields = comparedFields.where((field) => field.isFunctionType).toList(); result.writeln('@override'); @@ -1362,13 +1423,15 @@ abstract class ValueSourceClass if (comparedFields.isNotEmpty) { result.writeln('&&'); result.writeln( - comparedFields.map((field) { - var nameOrThisDotName = - field.name == 'other' ? 'this.other' : field.name; - return field.isFunctionType - ? '$nameOrThisDotName == _\$dynamicOther.${field.name}' - : '$nameOrThisDotName == other.${field.name}'; - }).join('&&'), + comparedFields + .map((field) { + var nameOrThisDotName = + field.name == 'other' ? 'this.other' : field.name; + return field.isFunctionType + ? '$nameOrThisDotName == _\$dynamicOther.${field.name}' + : '$nameOrThisDotName == other.${field.name}'; + }) + .join('&&'), ); } result.writeln(';'); @@ -1432,7 +1495,7 @@ abstract class ValueSourceClass } else { result.writeln( 'abstract $_class ${name}Builder$_boundedGenerics ' - '${interfaces.isEmpty ? '' : 'implements ' + interfaces.join(', ')}' + '${interfaces.isEmpty ? '' : 'implements ${interfaces.join(', ')}'}' '{', ); @@ -1447,9 +1510,10 @@ abstract class ValueSourceClass } for (var field in fields) { - var type = field.isNestedBuilder - ? field.typeInBuilder(libraryFragment) - : field.typeInLibraryFragment(libraryFragment); + var type = + field.isNestedBuilder + ? field.typeInBuilder(libraryFragment) + : field.typeInLibraryFragment(libraryFragment); final name = field.name; final autoCreatedNestedBuilder = diff --git a/built_value_generator/lib/src/value_source_field.dart b/built_value_generator/lib/src/value_source_field.dart index 032c1748..6d2a0288 100644 --- a/built_value_generator/lib/src/value_source_field.dart +++ b/built_value_generator/lib/src/value_source_field.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library built_value_generator.source_field; +library; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/ast/ast.dart'; @@ -11,13 +11,13 @@ import 'package:analyzer/dart/element/nullability_suffix.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; -import 'package:built_value_generator/src/dart_types.dart'; -import 'package:built_value_generator/src/field_mixin.dart'; -import 'package:built_value_generator/src/fields.dart' show collectFields; -import 'package:built_value_generator/src/fixes.dart'; -import 'package:built_value_generator/src/metadata.dart' - show metadataToStringValue; -import 'package:built_value_generator/src/parsed_library_results.dart'; + +import 'dart_types.dart'; +import 'field_mixin.dart'; +import 'fields.dart' show collectFields; +import 'fixes.dart'; +import 'metadata.dart' show metadataToStringValue; +import 'parsed_library_results.dart'; part 'value_source_field.g.dart'; @@ -216,7 +216,7 @@ abstract class ValueSourceField return result?.endsWith('?') ?? false; } - /// The [builderElementType] plus any import prefix. + /// The `builderElementType` plus any import prefix. @memoized String get builderElementTypeWithPrefix { // If it's a real field, it's a [VariableDeclaration] which is guaranteed @@ -380,10 +380,10 @@ abstract class ValueSourceField element.type, type, ); - if (builderElementTypeOrNull != type + '?' && + if (builderElementTypeOrNull != '$type?' && (builderType == null || (builderElementTypeOrNull != builderType && - builderElementTypeOrNull != builderType + '?'))) { + builderElementTypeOrNull != '$builderType?'))) { result.add( GeneratorError( (b) => b diff --git a/built_value_generator/pubspec.yaml b/built_value_generator/pubspec.yaml index 1f6005bc..22c7e441 100644 --- a/built_value_generator/pubspec.yaml +++ b/built_value_generator/pubspec.yaml @@ -22,8 +22,12 @@ dependencies: source_gen: ^3.0.0 dev_dependencies: - build_test: ^3.0.0 build_runner: '>=1.0.0 <3.0.0' + build_test: ^3.0.0 + dart_flutter_team_lints: ^3.5.2 logging: ^1.3.0 - pedantic: ^1.4.0 test: ^1.0.0 + +dependency_overrides: + built_value: + path: ../built_value diff --git a/built_value_generator/test/built_value_generator_test.dart b/built_value_generator/test/built_value_generator_test.dart index bc40aa81..5afc96fb 100644 --- a/built_value_generator/test/built_value_generator_test.dart +++ b/built_value_generator/test/built_value_generator_test.dart @@ -901,7 +901,7 @@ abstract class _Value implements Built<_Value, _ValueBuilder> { final String pkgName = 'pkg'; -final Builder builder = PartBuilder([BuiltValueGenerator()], '.g.dart'); +final Builder builder = PartBuilder([const BuiltValueGenerator()], '.g.dart'); Future generate(String source) async { var srcs = { diff --git a/built_value_generator/test/enum_class_generator_test.dart b/built_value_generator/test/enum_class_generator_test.dart index 24fe3dcc..576d4878 100644 --- a/built_value_generator/test/enum_class_generator_test.dart +++ b/built_value_generator/test/enum_class_generator_test.dart @@ -598,7 +598,7 @@ final String pkgName = 'pkg'; // Recreate BuiltValueGenerator for each test because we repeatedly create // enums with the same name in the same library, which will clash. -Builder get builder => PartBuilder([BuiltValueGenerator()], '.g.dart'); +Builder get builder => PartBuilder([const BuiltValueGenerator()], '.g.dart'); Future generate(String source) async { final srcs = { diff --git a/built_value_generator/test/serializer_generator_test.dart b/built_value_generator/test/serializer_generator_test.dart index dbace4b7..750b5144 100644 --- a/built_value_generator/test/serializer_generator_test.dart +++ b/built_value_generator/test/serializer_generator_test.dart @@ -261,7 +261,7 @@ abstract class Value implements Built { final String pkgName = 'pkg'; -final Builder builder = PartBuilder([BuiltValueGenerator()], '.g.dart'); +final Builder builder = PartBuilder([const BuiltValueGenerator()], '.g.dart'); Future generate(String source) async { var srcs = { diff --git a/built_value_test/analysis_options.yaml b/built_value_test/analysis_options.yaml index 108d1058..d978f811 100644 --- a/built_value_test/analysis_options.yaml +++ b/built_value_test/analysis_options.yaml @@ -1 +1 @@ -include: package:pedantic/analysis_options.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml diff --git a/built_value_test/pubspec.yaml b/built_value_test/pubspec.yaml index dd315bb3..c8fe7329 100644 --- a/built_value_test/pubspec.yaml +++ b/built_value_test/pubspec.yaml @@ -14,14 +14,20 @@ environment: sdk: '>=3.0.0 <4.0.0' dependencies: - built_value: ^8.7.0 built_collection: ^5.0.0 + built_value: ^8.7.0 collection: ^1.0.0 matcher: ^0.12.0 quiver: '>=0.21.0 <4.0.0' dev_dependencies: - built_value_generator: ^8.11.0 build_runner: '>=1.0.0 <3.0.0' - pedantic: ^1.4.0 + built_value_generator: ^8.11.0 + dart_flutter_team_lints: ^3.5.2 test: ^1.0.0 + +dependency_overrides: + built_value: + path: ../built_value + built_value_generator: + path: ../built_value_generator diff --git a/built_value_test/test/values.dart b/built_value_test/test/values.dart index c0e15a52..e105d027 100644 --- a/built_value_test/test/values.dart +++ b/built_value_test/test/values.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library values; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; @@ -17,7 +17,8 @@ abstract class SimpleValue implements Built { BuiltSet get aSet; BuiltSetMultimap get setMultimap; - factory SimpleValue([Function(SimpleValueBuilder) updates]) = _$SimpleValue; + factory SimpleValue([void Function(SimpleValueBuilder) updates]) = + _$SimpleValue; SimpleValue._(); } @@ -26,7 +27,7 @@ abstract class CompoundValue SimpleValue get simpleValue; String? get string; - factory CompoundValue([Function(CompoundValueBuilder) updates]) = + factory CompoundValue([void Function(CompoundValueBuilder) updates]) = _$CompoundValue; CompoundValue._(); } @@ -38,7 +39,7 @@ abstract class ComparedValue @BuiltValueField(compare: false) Function get onChanged; - factory ComparedValue([Function(ComparedValueBuilder) updates]) = + factory ComparedValue([void Function(ComparedValueBuilder) updates]) = _$ComparedValue; ComparedValue._(); } diff --git a/chat_example/analysis_options.yaml b/chat_example/analysis_options.yaml index 108d1058..d978f811 100644 --- a/chat_example/analysis_options.yaml +++ b/chat_example/analysis_options.yaml @@ -1 +1 @@ -include: package:pedantic/analysis_options.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml diff --git a/chat_example/lib/client/client.dart b/chat_example/lib/client/client.dart index 2dc9ce90..839d3572 100644 --- a/chat_example/lib/client/client.dart +++ b/chat_example/lib/client/client.dart @@ -5,10 +5,10 @@ import 'dart:async'; import 'dart:convert'; -import 'package:chat_example/client/client_connection.dart'; -import 'package:chat_example/client/display.dart'; -import 'package:chat_example/data_model/data_model.dart'; -import 'package:chat_example/data_model/serializers.dart'; +import '../data_model/data_model.dart'; +import '../data_model/serializers.dart'; +import 'client_connection.dart'; +import 'display.dart'; typedef CommandRunner = void Function(String command); diff --git a/chat_example/lib/client/html_display.dart b/chat_example/lib/client/html_display.dart index 5d3f3b00..c261b352 100644 --- a/chat_example/lib/client/html_display.dart +++ b/chat_example/lib/client/html_display.dart @@ -5,9 +5,10 @@ import 'dart:convert'; import 'dart:js_interop'; -import 'package:chat_example/client/display.dart'; import 'package:web/web.dart'; +import 'display.dart'; + /// [Display] using `dart:html`. class HtmlDisplay implements Display { final Element _element; @@ -23,16 +24,15 @@ class HtmlDisplay implements Display { @override void addLocal(String text) { - _element.textContent = _element.textContent! + - '
' - '${_htmlEscape.convert(text).replaceAll('\n', '
')}
'; + _element.textContent = + '${_element.textContent!}
${_htmlEscape.convert(text).replaceAll('\n', '
')}
'; window.scrollTo(0.toJS, document.body!.scrollHeight); } @override void add(String text) { - _element.textContent = _element.textContent! + - '${_htmlEscape.convert(text).replaceAll('\n', '
')}
'; + final content = _htmlEscape.convert(text).replaceAll('\n', '
'); + _element.textContent = '${_element.textContent!}$content
'; window.scrollTo(0.toJS, document.body!.scrollHeight); } } diff --git a/chat_example/lib/client/http_client_connection.dart b/chat_example/lib/client/http_client_connection.dart index 8a0b810a..41803902 100644 --- a/chat_example/lib/client/http_client_connection.dart +++ b/chat_example/lib/client/http_client_connection.dart @@ -5,9 +5,10 @@ import 'dart:async'; import 'dart:js_interop'; -import 'package:chat_example/client/client_connection.dart'; import 'package:web/web.dart'; +import 'client_connection.dart'; + /// [ClientConnection] using a web socket. class HttpClientConnection implements ClientConnection { final WebSocket _websocket; @@ -19,6 +20,7 @@ class HttpClientConnection implements ClientConnection { HttpClientConnection._(this._websocket) { _websocket.onMessage.listen((message) { + // ignore: invalid_runtime_check_with_js_interop_types _streamController.add(message.data as String); }); } diff --git a/chat_example/lib/data_model/data_model.dart b/chat_example/lib/data_model/data_model.dart index 25a6ac85..bd7ee94b 100644 --- a/chat_example/lib/data_model/data_model.dart +++ b/chat_example/lib/data_model/data_model.dart @@ -3,7 +3,7 @@ // license that can be found in the LICENSE file. /// Data model for the built_value chat example. -library data_model; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; @@ -24,7 +24,7 @@ abstract class Chat implements Built, Command { /// Set of usernames to send the chat to, or empty to send to everyone. BuiltSet get targets; - factory Chat([Function(ChatBuilder) updates]) = _$Chat; + factory Chat([void Function(ChatBuilder) updates]) = _$Chat; Chat._(); } @@ -34,7 +34,7 @@ abstract class Login implements Built, Command { String get username; String get password; - factory Login([Function(LoginBuilder) updates]) = _$Login; + factory Login([void Function(LoginBuilder) updates]) = _$Login; Login._(); } @@ -46,7 +46,7 @@ abstract class Status implements Built, Command { String get message; StatusType get type; - factory Status([Function(StatusBuilder) updates]) = _$Status; + factory Status([void Function(StatusBuilder) updates]) = _$Status; Status._(); } @@ -58,7 +58,7 @@ class StatusType extends EnumClass { static const StatusType away = _$away; static const StatusType offline = _$offline; - const StatusType._(String name) : super(name); + const StatusType._(super.name); static BuiltSet get values => _$stValues; static StatusType valueOf(String name) => _$stValueOf(name); @@ -72,7 +72,7 @@ abstract class ListUsers /// Set of statuses to filter by. BuiltSet get statusTypes; - factory ListUsers([Function(ListUsersBuilder) updates]) = _$ListUsers; + factory ListUsers([void Function(ListUsersBuilder) updates]) = _$ListUsers; ListUsers._(); } @@ -88,7 +88,7 @@ class LoginResponse extends EnumClass implements Response { static const LoginResponse badPassword = _$badPassword; static const LoginResponse reset = _$reset; - const LoginResponse._(String name) : super(name); + const LoginResponse._(super.name); static BuiltSet get values => _$lrValues; static LoginResponse valueOf(String name) => _$lrValueOf(name); @@ -121,7 +121,7 @@ abstract class ShowChat implements Built, Response { /// Message text. String get text; - factory ShowChat([Function(ShowChatBuilder) updates]) = _$ShowChat; + factory ShowChat([void Function(ShowChatBuilder) updates]) = _$ShowChat; ShowChat._(); @override @@ -135,12 +135,12 @@ abstract class Welcome implements Built, Response { String get message; - factory Welcome([Function(WelcomeBuilder) updates]) = _$Welcome; + factory Welcome([void Function(WelcomeBuilder) updates]) = _$Welcome; Welcome._(); @override String render() => - log.map((response) => response.render()).join('\n') + '\n' + message; + '${log.map((response) => response.render()).join('\n')}\n$message'; } /// Displays a list of users and their status messages. @@ -152,7 +152,7 @@ abstract class ListUsersResponse /// Map from username to status. BuiltMap get statuses; - factory ListUsersResponse([Function(ListUsersResponseBuilder) updates]) = + factory ListUsersResponse([void Function(ListUsersResponseBuilder) updates]) = _$ListUsersResponse; ListUsersResponse._(); @@ -162,7 +162,8 @@ abstract class ListUsersResponse for (final username in statuses.keys) { final status = statuses[username]!; result.write( - status.message.isEmpty ? username : '$username ${status.message}'); + status.message.isEmpty ? username : '$username ${status.message}', + ); result.write('\n'); } return result.toString(); diff --git a/chat_example/lib/data_model/serializers.dart b/chat_example/lib/data_model/serializers.dart index eb28c609..c051db50 100644 --- a/chat_example/lib/data_model/serializers.dart +++ b/chat_example/lib/data_model/serializers.dart @@ -2,11 +2,11 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library serializers; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/serializer.dart'; -import 'package:chat_example/data_model/data_model.dart'; +import 'data_model.dart'; part 'serializers.g.dart'; diff --git a/chat_example/lib/server/http_server_connection.dart b/chat_example/lib/server/http_server_connection.dart index 1f280eeb..e63959e7 100644 --- a/chat_example/lib/server/http_server_connection.dart +++ b/chat_example/lib/server/http_server_connection.dart @@ -4,9 +4,10 @@ import 'dart:async'; -import 'package:chat_example/server/server_connection.dart'; import 'package:web_socket_channel/web_socket_channel.dart'; +import 'server_connection.dart'; + /// [ServerConnection] using a web socket. class HttpServerConnection implements ServerConnection { final WebSocketChannel _webSocketChannel; diff --git a/chat_example/lib/server/server.dart b/chat_example/lib/server/server.dart index 478b9a27..9540a690 100644 --- a/chat_example/lib/server/server.dart +++ b/chat_example/lib/server/server.dart @@ -6,9 +6,9 @@ import 'dart:convert'; import 'dart:math'; import 'package:built_collection/built_collection.dart'; -import 'package:chat_example/data_model/data_model.dart'; -import 'package:chat_example/data_model/serializers.dart'; -import 'package:chat_example/server/server_connection.dart'; +import '../data_model/data_model.dart'; +import '../data_model/serializers.dart'; +import 'server_connection.dart'; /// Server-side logic for the built_value chat example. class Server { diff --git a/chat_example/lib/testing/fake_client_connection.dart b/chat_example/lib/testing/fake_client_connection.dart index fb6a7158..c8e089c7 100644 --- a/chat_example/lib/testing/fake_client_connection.dart +++ b/chat_example/lib/testing/fake_client_connection.dart @@ -4,7 +4,7 @@ import 'dart:async'; -import 'package:chat_example/client/client_connection.dart'; +import '../client/client_connection.dart'; /// Fake [ClientConnection] that exposes stream controllers. class FakeClientConnection implements ClientConnection { diff --git a/chat_example/lib/testing/fake_display.dart b/chat_example/lib/testing/fake_display.dart index 6045cd9b..26931c32 100644 --- a/chat_example/lib/testing/fake_display.dart +++ b/chat_example/lib/testing/fake_display.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -import 'package:chat_example/client/display.dart'; +import '../client/display.dart'; /// Fake [Display] that stores added text. class FakeDisplay implements Display { diff --git a/chat_example/lib/testing/fake_environment.dart b/chat_example/lib/testing/fake_environment.dart index 0de2bc70..8c44de6f 100644 --- a/chat_example/lib/testing/fake_environment.dart +++ b/chat_example/lib/testing/fake_environment.dart @@ -4,12 +4,12 @@ import 'dart:async'; -import 'package:chat_example/client/client.dart'; -import 'package:chat_example/server/server.dart'; -import 'package:chat_example/testing/fake_client_connection.dart'; -import 'package:chat_example/testing/fake_display.dart'; -import 'package:chat_example/testing/fake_server_connection.dart'; -import 'package:chat_example/testing/test_user.dart'; +import '../client/client.dart'; +import '../server/server.dart'; +import 'fake_client_connection.dart'; +import 'fake_display.dart'; +import 'fake_server_connection.dart'; +import 'test_user.dart'; /// Environment for testing server and client logic together. /// @@ -31,12 +31,12 @@ class FakeEnvironment { final clientConnection = FakeClientConnection(); final serverConnection = FakeServerConnection(); - clientConnection.toServerStreamController.stream.listen((string) { - serverConnection.fromClientStreamController.add(string); - }); - serverConnection.toClientStreamController.stream.listen((string) { - clientConnection.fromServerStreamController.add(string); - }); + clientConnection.toServerStreamController.stream.listen( + serverConnection.fromClientStreamController.add, + ); + serverConnection.toClientStreamController.stream.listen( + clientConnection.fromServerStreamController.add, + ); final keyboardInputController = StreamController(sync: true); final display = FakeDisplay(); diff --git a/chat_example/lib/testing/fake_server_connection.dart b/chat_example/lib/testing/fake_server_connection.dart index 61ebb5e0..686aff28 100644 --- a/chat_example/lib/testing/fake_server_connection.dart +++ b/chat_example/lib/testing/fake_server_connection.dart @@ -4,7 +4,7 @@ import 'dart:async'; -import 'package:chat_example/server/server_connection.dart'; +import '../server/server_connection.dart'; /// Fake [ServerConnection] that exposes stream controllers. class FakeServerConnection implements ServerConnection { diff --git a/chat_example/lib/testing/test_user.dart b/chat_example/lib/testing/test_user.dart index 3847a04d..2db9ba5c 100644 --- a/chat_example/lib/testing/test_user.dart +++ b/chat_example/lib/testing/test_user.dart @@ -4,9 +4,10 @@ import 'dart:async'; -import 'package:chat_example/testing/fake_display.dart'; import 'package:test/test.dart'; +import 'fake_display.dart'; + /// A test user connected to the fake environment. class TestUser { final FakeDisplay _display; diff --git a/chat_example/pubspec.yaml b/chat_example/pubspec.yaml index 74e3c35c..2813fe59 100644 --- a/chat_example/pubspec.yaml +++ b/chat_example/pubspec.yaml @@ -14,6 +14,7 @@ dependencies: shelf: ^1.0.0 shelf_proxy: ^1.0.0 shelf_web_socket: ^1.0.0 + test: ^1.0.0 web: ^1.1.1 web_socket_channel: ^2.0.0 @@ -22,5 +23,10 @@ dev_dependencies: build_test: any build_web_compilers: any built_value_generator: ^8.11.0 - pedantic: ^1.4.0 - test: ^1.0.0 + dart_flutter_team_lints: ^3.5.2 + +dependency_overrides: + built_value: + path: ../built_value + built_value_generator: + path: ../built_value_generator diff --git a/end_to_end_test/analysis_options.yaml b/end_to_end_test/analysis_options.yaml index 85d2969f..c8f11be3 100644 --- a/end_to_end_test/analysis_options.yaml +++ b/end_to_end_test/analysis_options.yaml @@ -1,4 +1,4 @@ -include: package:pedantic/analysis_options.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml analyzer: language: diff --git a/end_to_end_test/lib/enums.dart b/end_to_end_test/lib/enums.dart index 522a731f..67565590 100644 --- a/end_to_end_test/lib/enums.dart +++ b/end_to_end_test/lib/enums.dart @@ -1,7 +1,7 @@ // Copyright (c) 2017, Google Inc. Please see the AUTHORS file for details. // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library enums_nnbd; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; @@ -29,7 +29,7 @@ class SecondTestEnum extends EnumClass { static const SecondTestEnum no = _$n; static const SecondTestEnum definitely = _$definitely; - const SecondTestEnum._(String name) : super(name); + const SecondTestEnum._(super.name); static BuiltSet get values => _$vls; static SecondTestEnum valueOf(String name) => _$vlOf(name); @@ -48,7 +48,7 @@ class WireNameEnum extends EnumClass { @BuiltValueEnumConst(wireName: 'd') static const WireNameEnum definitely = _$wireDefinitely; - const WireNameEnum._(String name) : super(name); + const WireNameEnum._(super.name); static BuiltSet get values => _$wireValues; static WireNameEnum valueOf(String name) => _$wireValueOf(name); @@ -68,7 +68,7 @@ class WireNumberEnum extends EnumClass { @BuiltValueEnumConst(wireName: '3') static const WireNumberEnum definitely = _$wireNumberDefinitely; - const WireNumberEnum._(String name) : super(name); + const WireNumberEnum._(super.name); static BuiltSet get values => _$wireNumberValues; static WireNumberEnum valueOf(String name) => _$wireNumberValueOf(name); @@ -84,7 +84,7 @@ class DollarValueEnum extends EnumClass { @BuiltValueEnumConst(wireName: 'value') static const DollarValueEnum $value = _$value; - const DollarValueEnum._(String name) : super(name); + const DollarValueEnum._(super.name); static BuiltSet get values => _$dollarValues; static DollarValueEnum valueOf(String name) => _$dollarValueOf(name); @@ -98,7 +98,7 @@ class FallbackEnum extends EnumClass { @BuiltValueEnumConst(fallback: true) static const FallbackEnum no = _$fbNo; - const FallbackEnum._(String name) : super(name); + const FallbackEnum._(super.name); static BuiltSet get values => _$fbValues; static FallbackEnum valueOf(String name) => _$fbValueOf(name); @@ -114,12 +114,13 @@ class FallbackNumberEnum extends EnumClass { @BuiltValueEnumConst(wireNumber: -1, fallback: true) static const FallbackNumberEnum no = _$fbNumberNo; - const FallbackNumberEnum._(String name) : super(name); + const FallbackNumberEnum._(super.name); static BuiltSet get values => _$fbNumberValues; static FallbackNumberEnum valueOf(String name) => _$fbNumberValueOf(name); } +// ignore: camel_case_types class EnumWith$Dollar_UnderScore extends EnumClass { static Serializer get serializer => _$enumWith$DollarUnderScoreSerializer; @@ -132,7 +133,7 @@ class EnumWith$Dollar_UnderScore extends EnumClass { static const EnumWith$Dollar_UnderScore value$ = _$dollar_UnderScoreEnumValue$; - const EnumWith$Dollar_UnderScore._(String name) : super(name); + const EnumWith$Dollar_UnderScore._(super.name); static BuiltSet get values => _$enum$Dollar_UnderScoreValues; diff --git a/end_to_end_test/lib/generics.dart b/end_to_end_test/lib/generics.dart index d3860e26..ceb653e4 100644 --- a/end_to_end_test/lib/generics.dart +++ b/end_to_end_test/lib/generics.dart @@ -16,7 +16,7 @@ abstract class GenericValue T get value; - factory GenericValue([Function(GenericValueBuilder) updates]) = + factory GenericValue([void Function(GenericValueBuilder) updates]) = _$GenericValue; factory GenericValue.of(T value) => _$GenericValue._(value: value); GenericValue._(); @@ -34,7 +34,7 @@ abstract class InitializeGenericValue T get value; factory InitializeGenericValue( - [Function(InitializeGenericValueBuilder) updates]) = + [void Function(InitializeGenericValueBuilder) updates]) = _$InitializeGenericValue; factory InitializeGenericValue.of(T value) => _$InitializeGenericValue._(value: value); @@ -49,7 +49,8 @@ abstract class BoundGenericValue T get value; T? get nullableValue; - factory BoundGenericValue([Function(BoundGenericValueBuilder) updates]) = + factory BoundGenericValue( + [void Function(BoundGenericValueBuilder) updates]) = _$BoundGenericValue; BoundGenericValue._(); } @@ -65,7 +66,7 @@ abstract class BoundNullableGenericValue T? get nullableValue; factory BoundNullableGenericValue( - [Function(BoundNullableGenericValueBuilder) updates]) = + [void Function(BoundNullableGenericValueBuilder) updates]) = _$BoundNullableGenericValue; BoundNullableGenericValue._(); } @@ -79,7 +80,7 @@ abstract class CollectionGenericValue BuiltList get values; factory CollectionGenericValue( - [Function(CollectionGenericValueBuilder) updates]) = + [void Function(CollectionGenericValueBuilder) updates]) = _$CollectionGenericValue; CollectionGenericValue._(); } @@ -145,7 +146,7 @@ abstract class CustomBuilderGenericValue T get value; factory CustomBuilderGenericValue( - [Function(CustomBuilderGenericValueBuilder) updates]) = + [void Function(CustomBuilderGenericValueBuilder) updates]) = _$CustomBuilderGenericValue; CustomBuilderGenericValue._(); } @@ -177,9 +178,9 @@ abstract class ConcreteGeneric abstract class GenericFunction implements Built, GenericFunctionBuilder> { - Function(T) get function; + void Function(T) get function; - factory GenericFunction([Function(GenericFunctionBuilder) updates]) = + factory GenericFunction([void Function(GenericFunctionBuilder) updates]) = _$GenericFunction; GenericFunction._(); } @@ -193,7 +194,7 @@ abstract class NonBuiltGeneric NonBuilt get value; - factory NonBuiltGeneric([Function(NonBuiltGenericBuilder) updates]) = + factory NonBuiltGeneric([void Function(NonBuiltGenericBuilder) updates]) = _$NonBuiltGeneric; NonBuiltGeneric._(); } diff --git a/end_to_end_test/lib/generics.g.dart b/end_to_end_test/lib/generics.g.dart index 6e44666a..5ccb00a4 100644 --- a/end_to_end_test/lib/generics.g.dart +++ b/end_to_end_test/lib/generics.g.dart @@ -1704,7 +1704,7 @@ class ConcreteGenericBuilder class _$GenericFunction extends GenericFunction { @override - final Function(T) function; + final void Function(T) function; factory _$GenericFunction( [void Function(GenericFunctionBuilder)? updates]) => @@ -1747,9 +1747,9 @@ class GenericFunctionBuilder implements Builder, GenericFunctionBuilder> { _$GenericFunction? _$v; - Function(T)? _function; - Function(T)? get function => _$this._function; - set function(Function(T)? function) => _$this._function = function; + void Function(T)? _function; + void Function(T)? get function => _$this._function; + set function(void Function(T)? function) => _$this._function = function; GenericFunctionBuilder(); diff --git a/end_to_end_test/lib/imported_values.dart b/end_to_end_test/lib/imported_values.dart index 97576e05..b004fd79 100644 --- a/end_to_end_test/lib/imported_values.dart +++ b/end_to_end_test/lib/imported_values.dart @@ -6,7 +6,7 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; -import 'package:end_to_end_test/values.dart' as prefix; +import 'values.dart' as prefix; part 'imported_values.g.dart'; diff --git a/end_to_end_test/lib/mixins.dart b/end_to_end_test/lib/mixins.dart index 56ab435e..142fd69f 100644 --- a/end_to_end_test/lib/mixins.dart +++ b/end_to_end_test/lib/mixins.dart @@ -5,7 +5,7 @@ import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; -import 'package:end_to_end_test/mixins_src.dart'; +import 'mixins_src.dart'; part 'mixins.g.dart'; diff --git a/end_to_end_test/lib/serializers.dart b/end_to_end_test/lib/serializers.dart index f15708e6..0fee45d8 100644 --- a/end_to_end_test/lib/serializers.dart +++ b/end_to_end_test/lib/serializers.dart @@ -2,20 +2,21 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library serializers_nnbd; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/json_object.dart'; import 'package:built_value/serializer.dart'; -import 'package:end_to_end_test/collections.dart'; -import 'package:end_to_end_test/enums.dart'; -import 'package:end_to_end_test/generics.dart'; -import 'package:end_to_end_test/imported_values.dart'; -import 'package:end_to_end_test/interfaces.dart'; -import 'package:end_to_end_test/polymorphism.dart'; -import 'package:end_to_end_test/records.dart'; -import 'package:end_to_end_test/standard_json.dart'; -import 'package:end_to_end_test/values.dart'; + +import 'collections.dart'; +import 'enums.dart'; +import 'generics.dart'; +import 'imported_values.dart'; +import 'interfaces.dart'; +import 'polymorphism.dart'; +import 'records.dart'; +import 'standard_json.dart'; +import 'values.dart'; part 'serializers.g.dart'; @@ -77,12 +78,11 @@ part 'serializers.g.dart'; final Serializers serializers = _$serializers; // Check that multiple `Serializers` can be declared in one file. -@SerializersFor([ - Cat, -]) +@SerializersFor([Cat]) final Serializers moreSerializers = _$moreSerializers; // Check that generation does not fail due to new type `Never`. +// ignore: only_throw_errors Never get never => throw 'Never!'; // Check that generation does not fail due to new type `Record`. diff --git a/end_to_end_test/lib/standard_json.dart b/end_to_end_test/lib/standard_json.dart index ebaf8a53..6ca8f8d3 100644 --- a/end_to_end_test/lib/standard_json.dart +++ b/end_to_end_test/lib/standard_json.dart @@ -7,8 +7,8 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/json_object.dart'; import 'package:built_value/serializer.dart'; -import 'package:end_to_end_test/polymorphism.dart'; -import 'package:end_to_end_test/values.dart'; +import 'polymorphism.dart'; +import 'values.dart'; part 'standard_json.g.dart'; diff --git a/end_to_end_test/lib/values.dart b/end_to_end_test/lib/values.dart index 205e93a9..7002ef9f 100644 --- a/end_to_end_test/lib/values.dart +++ b/end_to_end_test/lib/values.dart @@ -5,10 +5,11 @@ import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; -import 'package:end_to_end_test/enums.dart' as using_import_as; -import 'package:end_to_end_test/mixins_src.dart'; import 'package:fixnum/fixnum.dart'; +import 'enums.dart' as using_import_as; +import 'mixins_src.dart'; + part 'values.g.dart'; abstract class SimpleValue implements Built { @@ -45,9 +46,9 @@ abstract class CompoundValueNoNesting SimpleValue get simpleValue; ValidatedValue? get validatedValue; - factory CompoundValueNoNesting( - [void Function(CompoundValueNoNestingBuilder) updates]) = - _$CompoundValueNoNesting; + factory CompoundValueNoNesting([ + void Function(CompoundValueNoNestingBuilder) updates, + ]) = _$CompoundValueNoNesting; CompoundValueNoNesting._(); } @@ -60,9 +61,9 @@ abstract class CompoundValueNoAutoNesting NoFieldsValue get value; - factory CompoundValueNoAutoNesting( - [void Function(CompoundValueNoAutoNestingBuilder) updates]) = - _$CompoundValueNoAutoNesting; + factory CompoundValueNoAutoNesting([ + void Function(CompoundValueNoAutoNestingBuilder) updates, + ]) = _$CompoundValueNoAutoNesting; CompoundValueNoAutoNesting._(); } @@ -77,9 +78,9 @@ abstract class CompoundValueComparableBuilders SimpleValue get simpleValue; ValidatedValue? get validatedValue; - factory CompoundValueComparableBuilders( - [void Function(CompoundValueComparableBuildersBuilder) updates]) = - _$CompoundValueComparableBuilders; + factory CompoundValueComparableBuilders([ + void Function(CompoundValueComparableBuildersBuilder) updates, + ]) = _$CompoundValueComparableBuilders; CompoundValueComparableBuilders._(); } @@ -104,9 +105,9 @@ abstract class CompoundValueNoNestingField // One nullable field using nesting. ValidatedValue? get validatedValueWithNested; - factory CompoundValueNoNestingField( - [void Function(CompoundValueNoNestingFieldBuilder) updates]) = - _$CompoundValueNoNestingField; + factory CompoundValueNoNestingField([ + void Function(CompoundValueNoNestingFieldBuilder) updates, + ]) = _$CompoundValueNoNestingField; CompoundValueNoNestingField._(); } @@ -133,9 +134,9 @@ abstract class CompoundValueNestingField @BuiltValueField(nestedBuilder: true) ValidatedValue? get validatedValueWithNested; - factory CompoundValueNestingField( - [void Function(CompoundValueNestingFieldBuilder) updates]) = - _$CompoundValueNestingField; + factory CompoundValueNestingField([ + void Function(CompoundValueNestingFieldBuilder) updates, + ]) = _$CompoundValueNestingField; CompoundValueNestingField._(); } @@ -155,9 +156,9 @@ abstract class CompoundValueNoAutoNestingField // One field using auto create builder nesting. NoFieldsValue get valueWithAutoCreate; - factory CompoundValueNoAutoNestingField( - [void Function(CompoundValueNoAutoNestingFieldBuilder) updates]) = - _$CompoundValueNoAutoNestingField; + factory CompoundValueNoAutoNestingField([ + void Function(CompoundValueNoAutoNestingFieldBuilder) updates, + ]) = _$CompoundValueNoAutoNestingField; CompoundValueNoAutoNestingField._(); } @@ -177,9 +178,9 @@ abstract class CompoundValueAutoNestingField @BuiltValueField(autoCreateNestedBuilder: true) NoFieldsValue get valueWithAutoCreate; - factory CompoundValueAutoNestingField( - [void Function(CompoundValueAutoNestingFieldBuilder) updates]) = - _$CompoundValueAutoNestingField; + factory CompoundValueAutoNestingField([ + void Function(CompoundValueAutoNestingFieldBuilder) updates, + ]) = _$CompoundValueAutoNestingField; CompoundValueAutoNestingField._(); } @@ -194,9 +195,9 @@ abstract class CompoundValueExplicitNoNesting SimpleValue get simpleValue; ValidatedValue? get validatedValue; - factory CompoundValueExplicitNoNesting( - [void Function(CompoundValueExplicitNoNestingBuilder) updates]) = - _$CompoundValueExplicitNoNesting; + factory CompoundValueExplicitNoNesting([ + void Function(CompoundValueExplicitNoNestingBuilder) updates, + ]) = _$CompoundValueExplicitNoNesting; CompoundValueExplicitNoNesting._(); } @@ -219,9 +220,9 @@ abstract class ExplicitNestedList implements Built { BuiltList> get nestedList; - factory ExplicitNestedList( - [void Function(ExplicitNestedListBuilder) updates]) = - _$ExplicitNestedList; + factory ExplicitNestedList([ + void Function(ExplicitNestedListBuilder) updates, + ]) = _$ExplicitNestedList; ExplicitNestedList._(); } @@ -239,9 +240,9 @@ abstract class ExplicitNonNullBuilderNullableSetter ExplicitNonNullBuilderNullableSetterBuilder> { SimpleValue? get simpleValue; - factory ExplicitNonNullBuilderNullableSetter( - [void Function(ExplicitNonNullBuilderNullableSetterBuilder) - updates]) = _$ExplicitNonNullBuilderNullableSetter; + factory ExplicitNonNullBuilderNullableSetter([ + void Function(ExplicitNonNullBuilderNullableSetterBuilder) updates, + ]) = _$ExplicitNonNullBuilderNullableSetter; ExplicitNonNullBuilderNullableSetter._(); } @@ -263,9 +264,9 @@ abstract class ExplicitNonNullBuilderNullableField ExplicitNonNullBuilderNullableFieldBuilder> { SimpleValue? get simpleValue; - factory ExplicitNonNullBuilderNullableField( - [void Function(ExplicitNonNullBuilderNullableFieldBuilder) updates]) = - _$ExplicitNonNullBuilderNullableField; + factory ExplicitNonNullBuilderNullableField([ + void Function(ExplicitNonNullBuilderNullableFieldBuilder) updates, + ]) = _$ExplicitNonNullBuilderNullableField; ExplicitNonNullBuilderNullableField._(); } @@ -329,9 +330,11 @@ abstract class ValueWithCode _$ValueWithCode; ValueWithCode._(); - factory ValueWithCode.fromCustomFactory(int anInt) => ValueWithCode((b) => b - ..anInt = anInt - ..aString = 'two'); + factory ValueWithCode.fromCustomFactory(int anInt) => ValueWithCode( + (b) => b + ..anInt = anInt + ..aString = 'two', + ); } abstract class ValueWithDefaults @@ -360,9 +363,9 @@ abstract class ValueWithBuilderSmarts implements Built { String get value; - factory ValueWithBuilderSmarts( - [void Function(ValueWithBuilderSmartsBuilder) updates]) = - _$ValueWithBuilderSmarts; + factory ValueWithBuilderSmarts([ + void Function(ValueWithBuilderSmartsBuilder) updates, + ]) = _$ValueWithBuilderSmarts; ValueWithBuilderSmarts._(); } @@ -404,9 +407,9 @@ abstract class ValueUsingImportAs using_import_as.TestEnum get value; using_import_as.TestEnum? get nullableValue; - factory ValueUsingImportAs( - [void Function(ValueUsingImportAsBuilder) updates]) = - _$ValueUsingImportAs; + factory ValueUsingImportAs([ + void Function(ValueUsingImportAsBuilder) updates, + ]) = _$ValueUsingImportAs; ValueUsingImportAs._(); } @@ -460,9 +463,9 @@ abstract class ListOfFunctionValue implements Built { BuiltList get functions; - factory ListOfFunctionValue( - [void Function(ListOfFunctionValueBuilder) updates]) = - _$ListOfFunctionValue; + factory ListOfFunctionValue([ + void Function(ListOfFunctionValueBuilder) updates, + ]) = _$ListOfFunctionValue; ListOfFunctionValue._(); } @@ -478,9 +481,9 @@ abstract class PartiallySerializableValue @BuiltValueField(serialize: false) int? get transientValue; - factory PartiallySerializableValue( - [void Function(PartiallySerializableValueBuilder) updates]) = - _$PartiallySerializableValue; + factory PartiallySerializableValue([ + void Function(PartiallySerializableValueBuilder) updates, + ]) = _$PartiallySerializableValue; PartiallySerializableValue._(); } @@ -523,9 +526,9 @@ abstract class FieldDiscoveryValue // Check that discovery doesn't recurse forever on reference to self. FieldDiscoveryValue? get recursiveValue; - factory FieldDiscoveryValue( - [void Function(FieldDiscoveryValueBuilder) updates]) = - _$FieldDiscoveryValue; + factory FieldDiscoveryValue([ + void Function(FieldDiscoveryValueBuilder) updates, + ]) = _$FieldDiscoveryValue; FieldDiscoveryValue._(); } @@ -550,9 +553,9 @@ abstract class SecondDiscoverableValue int get value; - factory SecondDiscoverableValue( - [void Function(SecondDiscoverableValueBuilder) updates]) = - _$SecondDiscoverableValue; + factory SecondDiscoverableValue([ + void Function(SecondDiscoverableValueBuilder) updates, + ]) = _$SecondDiscoverableValue; SecondDiscoverableValue._(); } @@ -564,9 +567,9 @@ abstract class ThirdDiscoverableValue int get value; - factory ThirdDiscoverableValue( - [void Function(ThirdDiscoverableValueBuilder) updates]) = - _$ThirdDiscoverableValue; + factory ThirdDiscoverableValue([ + void Function(ThirdDiscoverableValueBuilder) updates, + ]) = _$ThirdDiscoverableValue; ThirdDiscoverableValue._(); } @@ -605,17 +608,19 @@ abstract class ValueWithCustomSerializer int get value; - factory ValueWithCustomSerializer( - [void Function(ValueWithCustomSerializerBuilder) updates]) = - _$ValueWithCustomSerializer; + factory ValueWithCustomSerializer([ + void Function(ValueWithCustomSerializerBuilder) updates, + ]) = _$ValueWithCustomSerializer; ValueWithCustomSerializer._(); } class ValueWithCustomSerializerSerializer implements PrimitiveSerializer { @override - Iterable get types => - [ValueWithCustomSerializer, _$ValueWithCustomSerializer]; + Iterable get types => [ + ValueWithCustomSerializer, + _$ValueWithCustomSerializer, + ]; const ValueWithCustomSerializerSerializer(); @@ -624,14 +629,19 @@ class ValueWithCustomSerializerSerializer @override ValueWithCustomSerializer deserialize( - Serializers serializers, Object serialized, - {FullType specifiedType = FullType.unspecified}) { + Serializers serializers, + Object serialized, { + FullType specifiedType = FullType.unspecified, + }) { return ValueWithCustomSerializer((b) => b.value = serialized as int); } @override - Object serialize(Serializers serializers, ValueWithCustomSerializer object, - {FullType specifiedType = FullType.unspecified}) { + Object serialize( + Serializers serializers, + ValueWithCustomSerializer object, { + FullType specifiedType = FullType.unspecified, + }) { return object.value; } } @@ -650,9 +660,9 @@ abstract class ValueWithOnSet abstract class CustomToStringValue extends Object with CustomToString implements Built { - factory CustomToStringValue( - [void Function(CustomToStringValueBuilder) updates]) = - _$CustomToStringValue; + factory CustomToStringValue([ + void Function(CustomToStringValueBuilder) updates, + ]) = _$CustomToStringValue; CustomToStringValue._(); } @@ -687,9 +697,9 @@ abstract class DefaultsForFieldSettingsValue @BuiltValueField(serialize: true) int get serialized; - factory DefaultsForFieldSettingsValue( - [void Function(DefaultsForFieldSettingsValueBuilder) updates]) = - _$DefaultsForFieldSettingsValue; + factory DefaultsForFieldSettingsValue([ + void Function(DefaultsForFieldSettingsValueBuilder) updates, + ]) = _$DefaultsForFieldSettingsValue; DefaultsForFieldSettingsValue._(); } @@ -716,9 +726,9 @@ abstract class ValueWithBuilderInitializer SimpleValue? get nullableNestedValue; SimpleValue? get nullableNestedValueWithDefault; - factory ValueWithBuilderInitializer( - [void Function(ValueWithBuilderInitializerBuilder) updates]) = - _$ValueWithBuilderInitializer; + factory ValueWithBuilderInitializer([ + void Function(ValueWithBuilderInitializerBuilder) updates, + ]) = _$ValueWithBuilderInitializer; ValueWithBuilderInitializer._(); } @@ -735,9 +745,9 @@ abstract class ValueWithBuilderFinalizer int get anInt; - factory ValueWithBuilderFinalizer( - [void Function(ValueWithBuilderFinalizerBuilder) updates]) = - _$ValueWithBuilderFinalizer; + factory ValueWithBuilderFinalizer([ + void Function(ValueWithBuilderFinalizerBuilder) updates, + ]) = _$ValueWithBuilderFinalizer; ValueWithBuilderFinalizer._(); } @@ -746,7 +756,8 @@ abstract class ValueWithGenericBuilderInitializer Built, ValueWithGenericBuilderInitializerBuilder> { static void _initializeBuilder( - ValueWithGenericBuilderInitializerBuilder b) { + ValueWithGenericBuilderInitializerBuilder b, + ) { if (TT == int) { b.value = 42 as TT; } @@ -754,9 +765,9 @@ abstract class ValueWithGenericBuilderInitializer T? get value; - factory ValueWithGenericBuilderInitializer( - [void Function(ValueWithGenericBuilderInitializerBuilder) - updates]) = _$ValueWithGenericBuilderInitializer; + factory ValueWithGenericBuilderInitializer([ + void Function(ValueWithGenericBuilderInitializerBuilder) updates, + ]) = _$ValueWithGenericBuilderInitializer; ValueWithGenericBuilderInitializer._(); } @@ -777,12 +788,13 @@ abstract class MemoizedHashcodeValue @override @memoized + // ignore: hash_and_equals int get hashCode; MemoizedHashcodeValue._(); - factory MemoizedHashcodeValue( - [void Function(MemoizedHashcodeValueBuilder) updates]) = - _$MemoizedHashcodeValue; + factory MemoizedHashcodeValue([ + void Function(MemoizedHashcodeValueBuilder) updates, + ]) = _$MemoizedHashcodeValue; } abstract class _PrivateValue @@ -800,9 +812,9 @@ abstract class SerializesNullsValue String? get value; - factory SerializesNullsValue( - [void Function(SerializesNullsValueBuilder) updates]) = - _$SerializesNullsValue; + factory SerializesNullsValue([ + void Function(SerializesNullsValueBuilder) updates, + ]) = _$SerializesNullsValue; SerializesNullsValue._(); } @@ -813,9 +825,9 @@ abstract class NullableObjectValue Object? get value; - factory NullableObjectValue( - [void Function(NullableObjectValueBuilder) updates]) = - _$NullableObjectValue; + factory NullableObjectValue([ + void Function(NullableObjectValueBuilder) updates, + ]) = _$NullableObjectValue; NullableObjectValue._(); } @@ -910,9 +922,9 @@ abstract class ValueWithAwkwardNestedBuilder BuiltList get values; BuiltMap get map; - factory ValueWithAwkwardNestedBuilder( - [void Function(ValueWithAwkwardNestedBuilderBuilder) updates]) = - _$ValueWithAwkwardNestedBuilder; + factory ValueWithAwkwardNestedBuilder([ + void Function(ValueWithAwkwardNestedBuilderBuilder) updates, + ]) = _$ValueWithAwkwardNestedBuilder; ValueWithAwkwardNestedBuilder._(); } @@ -922,7 +934,7 @@ abstract class ValueWithAwkwardNestedBuilderBuilder ValueWithAwkwardNestedBuilderBuilder> { SimpleValueBuilder? value1; SimpleValueBuilder? _value2; - SimpleValueBuilder? get value2 => (_value2 ??= SimpleValueBuilder()); + SimpleValueBuilder? get value2 => _value2 ??= SimpleValueBuilder(); set value2(SimpleValueBuilder? b) => _value2 = b; ListBuilder? values = ListBuilder(); MapBuilder? map = MapBuilder(); @@ -933,8 +945,8 @@ abstract class ValueWithAwkwardNestedBuilderBuilder } abstract class VariousFunctionsValue - // Functions declared in a different file are rendered via DartType instead - // of using the AST, so check those too. + // Functions declared in a different file are rendered via DartType + // insteadof using the AST, so check those too. with FunctionMixin implements @@ -947,8 +959,8 @@ abstract class VariousFunctionsValue Future Function(int x, {required int y, required double z}) get requiredNamedFunction; - factory VariousFunctionsValue( - [void Function(VariousFunctionsValueBuilder) updates]) = - _$VariousFunctionsValue; + factory VariousFunctionsValue([ + void Function(VariousFunctionsValueBuilder) updates, + ]) = _$VariousFunctionsValue; VariousFunctionsValue._(); } diff --git a/end_to_end_test/pubspec.yaml b/end_to_end_test/pubspec.yaml index 6abbd805..2ce9790e 100644 --- a/end_to_end_test/pubspec.yaml +++ b/end_to_end_test/pubspec.yaml @@ -12,11 +12,17 @@ dependencies: built_collection: ^5.0.0 built_value: ^8.7.0 + fixnum: any + test: any dev_dependencies: build: ^3.0.0 build_runner: '>=1.0.0 <3.0.0' built_value_generator: ^8.11.0 - fixnum: ^1.0.0 - pedantic: ^1.4.0 + dart_flutter_team_lints: ^3.5.2 quiver: '>=0.21.0 <4.0.0' - test: ^1.16.0 + +dependency_overrides: + built_value: + path: ../built_value + built_value_generator: + path: ../built_value_generator diff --git a/end_to_end_test/test/collections_serializer_test.dart b/end_to_end_test/test/collections_serializer_test.dart index 53063d6f..d6912097 100644 --- a/end_to_end_test/test/collections_serializer_test.dart +++ b/end_to_end_test/test/collections_serializer_test.dart @@ -77,7 +77,8 @@ void main() { ], ])) as Object; var serializersWithBuilder = (serializers.toBuilder() - ..addBuilderFactory(FullType(BuiltList, [FullType.nullable(int)]), + ..addBuilderFactory( + const FullType(BuiltList, [FullType.nullable(int)]), () => ListBuilder())) .build(); diff --git a/end_to_end_test/test/generics_test.dart b/end_to_end_test/test/generics_test.dart index 71b7acf9..6414f720 100644 --- a/end_to_end_test/test/generics_test.dart +++ b/end_to_end_test/test/generics_test.dart @@ -72,7 +72,7 @@ void main() { test('can be compared', () { // Generic functions have troublesome behaviour when casting. Check that // operator== does not throw due to a disallowed cast. - final function = (int x) {}; + void function(int x) {} expect( GenericFunction((b) => b..function = function) == GenericFunction((b) => b..function = function), diff --git a/end_to_end_test/test/polymorphism_test.dart b/end_to_end_test/test/polymorphism_test.dart index 7efeebce..fc773b99 100644 --- a/end_to_end_test/test/polymorphism_test.dart +++ b/end_to_end_test/test/polymorphism_test.dart @@ -122,6 +122,7 @@ void main() { ]; final modifiedHasFields = hasFields + // ignore: avoid_dynamic_calls .map((hasField) => hasField.rebuild((b) => b..field += b.field)); final expectedHasFields = [ @@ -151,6 +152,7 @@ void main() { test('nested builder getter is not nullable', () { // This is purely a static check, the function isn't actually called. // Access `b.color` without `!` to ensure the getter is not nullable. + // ignore: unnecessary_statements (Vehicle vehicle) { return vehicle.rebuild((b) => b.color.replace(VehicleColor())); }; @@ -161,6 +163,7 @@ void main() { test('does not nest builders', () { // This is purely a static check, the function isn't actually called. // Check that the builder field is not a nested builder. + // ignore: unnecessary_statements (NotInstantiableNotNested value) => value.rebuild((b) => b..list = BuiltList()); }); diff --git a/end_to_end_test/test/private_value_test.dart b/end_to_end_test/test/private_value_test.dart index 91d92f87..c8c25f24 100644 --- a/end_to_end_test/test/private_value_test.dart +++ b/end_to_end_test/test/private_value_test.dart @@ -2,10 +2,10 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library value_test; +library; -import 'package:test/test.dart'; import 'package:built_value/built_value.dart'; +import 'package:test/test.dart'; part 'private_value_test.g.dart'; @@ -14,7 +14,7 @@ abstract class _PrivateValue implements Built<_PrivateValue, _PrivateValueBuilder> { int get value; - factory _PrivateValue(Function(_PrivateValueBuilder) updates) = + factory _PrivateValue(void Function(_PrivateValueBuilder) updates) = _$PrivateValue; _PrivateValue._(); diff --git a/end_to_end_test/test/records_serializer_test.dart b/end_to_end_test/test/records_serializer_test.dart index 1081020a..4d5a8a53 100644 --- a/end_to_end_test/test/records_serializer_test.dart +++ b/end_to_end_test/test/records_serializer_test.dart @@ -78,20 +78,20 @@ void main() { var serializersWithCustomSerializer = (serializers.toBuilder() ..addPlugin( StandardJsonPlugin(typesToLeaveAsList: {RecordOfIntOrList})) - ..add(RecordOfIntOrListSerializer())) + ..add(const RecordOfIntOrListSerializer())) .build(); test('can be serialized with custom serializer', () { expect( serializersWithCustomSerializer.serialize(data, - specifiedType: FullType(SerializableRecordValue)), + specifiedType: const FullType(SerializableRecordValue)), serialized); }); test('can be deserialized with custom deserializer', () { expect( serializersWithCustomSerializer.deserialize(serialized, - specifiedType: FullType(SerializableRecordValue)), + specifiedType: const FullType(SerializableRecordValue)), data); }); }); diff --git a/end_to_end_test/test/standard_json_serializer_test.dart b/end_to_end_test/test/standard_json_serializer_test.dart index 5c1c646c..a8a441ec 100644 --- a/end_to_end_test/test/standard_json_serializer_test.dart +++ b/end_to_end_test/test/standard_json_serializer_test.dart @@ -43,7 +43,7 @@ void main() { ..objects.add(ComplexValue((b) => b ..primitive = 8 ..value.anInt = 9))); - var specifiedType = FullType(StandardJsonValue); + var specifiedType = const FullType(StandardJsonValue); var serializersWithPlugin = (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build(); var serialized = json.decode(json.encode({ @@ -118,7 +118,7 @@ void main() { ..keyValues['three'] = JsonObject(true) ..keyValues['four'] = JsonObject([1, 2, 3]) ..keyValues['five'] = JsonObject({'one': 1, 'two': 2})); - var specifiedType = FullType(StandardJsonValue); + var specifiedType = const FullType(StandardJsonValue); var serializersWithPlugin = (serializers.toBuilder()..addPlugin(StandardJsonPlugin())).build(); var serialized = json.decode(json.encode({ diff --git a/end_to_end_test/test/to_string_test.dart b/end_to_end_test/test/to_string_test.dart index 6c5ef098..620b4653 100644 --- a/end_to_end_test/test/to_string_test.dart +++ b/end_to_end_test/test/to_string_test.dart @@ -19,8 +19,7 @@ void main() { }); test('can be customized', () { - newBuiltValueToStringHelper = - (className) => FlatBuiltValueToStringHelper(className); + newBuiltValueToStringHelper = FlatBuiltValueToStringHelper.new; final value = CompoundValue((b) => b..simpleValue.anInt = 1); expect(value.toString(), diff --git a/end_to_end_test/test/values_serializer_test.dart b/end_to_end_test/test/values_serializer_test.dart index 8fc030a2..4a529154 100644 --- a/end_to_end_test/test/values_serializer_test.dart +++ b/end_to_end_test/test/values_serializer_test.dart @@ -399,7 +399,7 @@ void main() { ..number = 17.5 ..string = 'test' ..dateTime = DateTime.fromMillisecondsSinceEpoch(1000, isUtc: true) - ..duration = Duration(microseconds: 12345) + ..duration = const Duration(microseconds: 12345) ..regExp = RegExp(r'\w+@\d+') ..uri = Uri.parse('https://github.com/google/built_value.dart') ..bigInt = BigInt.parse('123456789012345678901234567890')); diff --git a/example/analysis_options.yaml b/example/analysis_options.yaml index 108d1058..d978f811 100644 --- a/example/analysis_options.yaml +++ b/example/analysis_options.yaml @@ -1 +1 @@ -include: package:pedantic/analysis_options.yaml +include: package:dart_flutter_team_lints/analysis_options.yaml diff --git a/example/lib/collections.dart b/example/lib/collections.dart index 8d02ebc1..785a5b24 100644 --- a/example/lib/collections.dart +++ b/example/lib/collections.dart @@ -2,8 +2,6 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library collections; - import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; diff --git a/example/lib/enums.dart b/example/lib/enums.dart index 941a9b48..ff6d0831 100644 --- a/example/lib/enums.dart +++ b/example/lib/enums.dart @@ -2,8 +2,6 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library enums; - import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; @@ -31,7 +29,7 @@ class TestEnum extends EnumClass { static const TestEnum no = _$no; static const TestEnum maybe = _$maybe; - const TestEnum._(String name) : super(name); + const TestEnum._(super.name); static BuiltSet get values => _$values; static TestEnum valueOf(String name) => _$valueOf(name); @@ -47,7 +45,7 @@ class SecondTestEnum extends EnumClass { static const SecondTestEnum no = _$n; static const SecondTestEnum definitely = _$definitely; - const SecondTestEnum._(String name) : super(name); + const SecondTestEnum._(super.name); static BuiltSet get values => _$vls; static SecondTestEnum valueOf(String name) => _$vlOf(name); @@ -68,7 +66,7 @@ class WireNameEnum extends EnumClass { @BuiltValueEnumConst(wireName: 'd') static const WireNameEnum definitely = _$wireDefinitely; - const WireNameEnum._(String name) : super(name); + const WireNameEnum._(super.name); static BuiltSet get values => _$wireValues; static WireNameEnum valueOf(String name) => _$wireValueOf(name); diff --git a/example/lib/example.dart b/example/lib/example.dart index 66a30324..1aaed546 100644 --- a/example/lib/example.dart +++ b/example/lib/example.dart @@ -1,8 +1,8 @@ import 'package:built_value/standard_json_plugin.dart'; -import 'package:example/generics.dart'; -import 'package:example/polymorphism.dart'; -import 'package:example/serializers.dart'; -import 'package:example/values.dart'; +import 'generics.dart'; +import 'polymorphism.dart'; +import 'serializers.dart'; +import 'values.dart'; /// Simple usage examples for built_value. void example() { diff --git a/example/lib/generics.dart b/example/lib/generics.dart index fb5c138d..68ee10d9 100644 --- a/example/lib/generics.dart +++ b/example/lib/generics.dart @@ -2,8 +2,6 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library generics; - import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; @@ -26,7 +24,7 @@ abstract class GenericValue T get value; - factory GenericValue([Function(GenericValueBuilder) updates]) = + factory GenericValue([void Function(GenericValueBuilder) updates]) = _$GenericValue; GenericValue._(); } @@ -43,8 +41,9 @@ abstract class BoundGenericValue T get value; - factory BoundGenericValue([Function(BoundGenericValueBuilder) updates]) = - _$BoundGenericValue; + factory BoundGenericValue([ + void Function(BoundGenericValueBuilder) updates, + ]) = _$BoundGenericValue; BoundGenericValue._(); } @@ -61,9 +60,9 @@ abstract class CollectionGenericValue BuiltList get values; - factory CollectionGenericValue( - [Function(CollectionGenericValueBuilder) updates]) = - _$CollectionGenericValue; + factory CollectionGenericValue([ + void Function(CollectionGenericValueBuilder) updates, + ]) = _$CollectionGenericValue; CollectionGenericValue._(); } diff --git a/example/lib/interfaces.dart b/example/lib/interfaces.dart index c9c355d1..d9d862a2 100644 --- a/example/lib/interfaces.dart +++ b/example/lib/interfaces.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library interfaces; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; @@ -62,7 +62,7 @@ class EnumWithInt extends EnumClass implements HasInt { static const EnumWithInt two = _$two; static const EnumWithInt three = _$three; - const EnumWithInt._(String name) : super(name); + const EnumWithInt._(super.name); static BuiltSet get values => _$values; diff --git a/example/lib/polymorphism.dart b/example/lib/polymorphism.dart index 194c29f2..8e747d56 100644 --- a/example/lib/polymorphism.dart +++ b/example/lib/polymorphism.dart @@ -1,4 +1,4 @@ -library polymorphism; +library; import 'package:built_value/built_value.dart'; import 'package:built_value/serializer.dart'; diff --git a/example/lib/serializers.dart b/example/lib/serializers.dart index 2570d573..c0e90328 100644 --- a/example/lib/serializers.dart +++ b/example/lib/serializers.dart @@ -2,14 +2,14 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library serializers; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/json_object.dart'; import 'package:built_value/serializer.dart'; -import 'package:example/generics.dart'; -import 'package:example/polymorphism.dart'; -import 'package:example/values.dart'; +import 'generics.dart'; +import 'polymorphism.dart'; +import 'values.dart'; part 'serializers.g.dart'; diff --git a/example/lib/values.dart b/example/lib/values.dart index 2ad02cf3..816448d4 100644 --- a/example/lib/values.dart +++ b/example/lib/values.dart @@ -2,7 +2,7 @@ // All rights reserved. Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -library values; +library; import 'package:built_collection/built_collection.dart'; import 'package:built_value/built_value.dart'; diff --git a/example/pubspec.yaml b/example/pubspec.yaml index 2cd8a2e2..2136d816 100644 --- a/example/pubspec.yaml +++ b/example/pubspec.yaml @@ -14,6 +14,12 @@ dependencies: dev_dependencies: build_runner: '>=1.0.0 <3.0.0' built_value_generator: ^8.11.0 - pedantic: ^1.4.0 + dart_flutter_team_lints: ^3.5.2 quiver: '>=0.21.0 <4.0.0' test: ^1.0.0 + +dependency_overrides: + built_value: + path: ../built_value + built_value_generator: + path: ../built_value_generator