Skip to content

Commit 9ed4f0d

Browse files
authored
Merge pull request #314 from davidmorgan/fix-polymorphism
Fix serialization when using polymorphism with StandardJsonPlugin.
2 parents 99db4d8 + d2e0d5a commit 9ed4f0d

File tree

16 files changed

+201
-25
lines changed

16 files changed

+201
-25
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 4.5.3
4+
5+
- Fix serialization when using polymorphism with StandardJsonPlugin.
6+
37
## 4.5.2
48

59
- Allow built_collection 3.0.0.

benchmark/pubspec.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,16 @@ environment:
1212
dependencies:
1313
browser: any
1414
built_collection: '>=2.0.0 <4.0.0'
15-
built_value: ^4.5.2
15+
# built_value: ^4.5.2
16+
built_value:
17+
path: ../built_value
1618

1719
dev_dependencies:
1820
build: ^0.11.1
1921
build_runner: ^0.6.0
20-
built_value_generator: ^4.5.2
22+
# built_value_generator: ^4.5.2
23+
built_value_generator:
24+
path: ../built_value_generator
2125
source_gen: ^0.7.0
2226
quiver: '>=0.21.0 <0.28.0'
2327
test: any

built_value/lib/src/built_json_serializers.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -99,14 +99,15 @@ class BuiltJsonSerializers implements Serializers {
9999
transformedObject =
100100
plugin.beforeDeserialize(transformedObject, specifiedType);
101101
}
102-
var result = _deserialize(transformedObject, specifiedType);
102+
var result = _deserialize(object, transformedObject, specifiedType);
103103
for (final plugin in _plugins) {
104104
result = plugin.afterDeserialize(result, specifiedType);
105105
}
106106
return result;
107107
}
108108

109-
Object _deserialize(Object object, FullType specifiedType) {
109+
Object _deserialize(
110+
Object objectBeforePlugins, Object object, FullType specifiedType) {
110111
if (specifiedType.isUnspecified) {
111112
final String wireName = (object as List).first as String;
112113

@@ -128,7 +129,7 @@ class BuiltJsonSerializers implements Serializers {
128129
if (serializer == null) {
129130
if (object is List && object.first is String) {
130131
// Might be an interface; try resolving using the type on the wire.
131-
return deserialize(object);
132+
return deserialize(objectBeforePlugins);
132133
} else {
133134
throw new StateError("No serializer for '${specifiedType.root}'.");
134135
}

built_value_generator/pubspec.yaml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ dependencies:
1414
analyzer: '>=0.29.0 <0.31.0'
1515
build: ^0.11.1
1616
built_collection: '>=2.0.0 <4.0.0'
17-
built_value: ^4.5.2
17+
# built_value: ^4.5.2
18+
built_value:
19+
path: ../built_value
1820
source_gen: ^0.7.0
1921
quiver: '>=0.21.0 <0.28.0'
2022

built_value_test/pubspec.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,9 @@ environment:
1111
sdk: '>=1.8.0 <2.0.0'
1212

1313
dependencies:
14-
built_value: ^4.5.2
14+
# built_value: ^4.5.2
15+
built_value:
16+
path: ../built_value
1517
built_collection: '>=2.0.0 <4.0.0'
1618
collection: ^1.0.0
1719
quiver: '>=0.21.0 <0.28.0'
@@ -20,5 +22,7 @@ dependencies:
2022
dev_dependencies:
2123
build: ^0.11.1
2224
build_runner: ^0.6.0
23-
built_value_generator: ^4.5.2
25+
# built_value_generator: ^4.5.2
26+
built_value_generator:
27+
path: ../built_value_generator
2428
source_gen: ^0.7.0

chat_example/pubspec.yaml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ environment:
1212
dependencies:
1313
browser: ^0.10.0
1414
built_collection: '>=2.0.0 <4.0.0'
15-
built_value: ^4.5.2
15+
# built_value: ^4.5.2
16+
built_value:
17+
path: ../built_value
1618
shelf: ^0.6.0
1719
shelf_proxy: ^0.1.0
1820
shelf_web_socket: ^0.2.1
@@ -21,6 +23,8 @@ dependencies:
2123
dev_dependencies:
2224
build: ^0.11.1
2325
build_runner: ^0.6.0
24-
built_value_generator: ^4.5.2
26+
# built_value_generator: ^4.5.2
27+
built_value_generator:
28+
path: ../built_value_generator
2529
source_gen: ^0.7.0
2630
test: any

end_to_end_test/lib/polymorphism.dart

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
library polymorphism;
22

3+
import 'package:built_collection/built_collection.dart';
34
import 'package:built_value/built_value.dart';
45
import 'package:built_value/serializer.dart';
56

@@ -59,7 +60,10 @@ abstract class Swimmer {
5960
}
6061

6162
abstract class Cage implements Built<Cage, CageBuilder> {
63+
static Serializer<Cage> get serializer => _$cageSerializer;
64+
6265
Animal get inhabitant;
66+
BuiltList<Animal> get otherInhabitants;
6367

6468
factory Cage([updates(CageBuilder b)]) = _$Cage;
6569
Cage._();

end_to_end_test/lib/polymorphism.g.dart

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

end_to_end_test/lib/serializers.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,14 @@ part 'serializers.g.dart';
2121
@SerializersFor(const [
2222
BoundGenericValue,
2323
Cat,
24+
Cage,
2425
CollectionGenericValue,
2526
Collections,
2627
CompoundValue,
2728
CompoundValueNoNesting,
2829
EnumWithInt,
2930
FieldDiscoveryValue,
31+
Fish,
3032
GenericContainer,
3133
GenericValue,
3234
HasDouble,

end_to_end_test/lib/serializers.g.dart

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

0 commit comments

Comments
 (0)