Skip to content
This repository was archived by the owner on May 25, 2022. It is now read-only.

Commit a4ae517

Browse files
committed
Addressed review comments.
1 parent a2e6b9e commit a4ae517

23 files changed

+105
-89
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
- Stop falling back to "<Object>" for collection type parameters.
66
- Extend code generation to add the builders needed for collections.
7+
- Differentiate Object from unspecified.
78

89
## 0.0.2
910

built_json/lib/built_json.dart

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ abstract class Serializers {
4444
/// Create one using [SerializersBuilder].
4545
///
4646
/// TODO(davidmorgan): document the wire format.
47-
Object serialize(Object object, {FullType specifiedType: const FullType()});
47+
Object serialize(Object object,
48+
{FullType specifiedType: FullType.unspecified});
4849

4950
/// Deserializes [serialized].
5051
///
@@ -53,7 +54,7 @@ abstract class Serializers {
5354
/// If [serialized] was produced by calling [serialize] with [specifiedType],
5455
/// the exact same [specifiedType] must be provided to deserialize.
5556
Object deserialize(Object serialized,
56-
{FullType specifiedType: const FullType()});
57+
{FullType specifiedType: FullType.unspecified});
5758

5859
/// Creates a new builder for the type represented by [fullType].
5960
///
@@ -83,23 +84,29 @@ abstract class SerializersBuilder {
8384
}
8485

8586
/// A [Type] with, optionally, [FullType] generic type parameters.
87+
///
88+
/// May also be [unspecified], indicating that no type information is
89+
/// available.
8690
class FullType {
91+
// An unspecified type.
92+
static const unspecified = const FullType(null);
93+
8794
/// The root of the type.
8895
final Type root;
8996

9097
/// Type parameters of the type.
9198
final List<FullType> parameters;
9299

93-
const FullType([this.root = Object, this.parameters = const []]);
100+
const FullType(this.root, [this.parameters = const []]);
94101

95-
bool get isObject => root == Object;
102+
bool get isUnspecified => identical(root, null);
96103

97104
@override
98-
String toString() {
99-
return parameters.isEmpty
100-
? root.toString()
101-
: '${root.toString()}<${parameters.join(", ")}>';
102-
}
105+
String toString() => isUnspecified
106+
? 'unspecified'
107+
: parameters.isEmpty
108+
? root.toString()
109+
: '${root.toString()}<${parameters.join(", ")}>';
103110
}
104111

105112
/// Serializes a single type.
@@ -131,12 +138,12 @@ abstract class Serializer<T> {
131138
///
132139
/// TODO(davidmorgan): document the wire format.
133140
Object serialize(Serializers serializers, T object,
134-
{FullType specifiedType: const FullType()});
141+
{FullType specifiedType: FullType.unspecified});
135142

136143
/// Deserializes [serialized].
137144
///
138145
/// Use [serializers] as needed for nested deserialization. Information about
139146
/// the type being deserialized is provided in [specifiedType].
140147
T deserialize(Serializers serializers, Object serialized,
141-
{FullType specifiedType: const FullType()});
148+
{FullType specifiedType: FullType.unspecified});
142149
}

built_json/lib/src/bool_serializer.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ class BoolSerializer implements Serializer<bool> {
1212

1313
@override
1414
Object serialize(Serializers serializers, bool boolean,
15-
{FullType specifiedType: const FullType()}) {
15+
{FullType specifiedType: FullType.unspecified}) {
1616
return boolean;
1717
}
1818

1919
@override
2020
bool deserialize(Serializers serializers, Object serialized,
21-
{FullType specifiedType: const FullType()}) {
21+
{FullType specifiedType: FullType.unspecified}) {
2222
return serialized as bool;
2323
}
2424
}

built_json/lib/src/built_json_serializers.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class BuiltJsonSerializers implements Serializers {
1717

1818
@override
1919
Object serialize(Object object,
20-
{FullType specifiedType: const FullType()}) {
21-
if (specifiedType.isObject) {
20+
{FullType specifiedType: FullType.unspecified}) {
21+
if (specifiedType.isUnspecified) {
2222
final serializer = _getSerializerByType(object.runtimeType);
2323
if (serializer == null) throw new StateError(
2424
"No serializer for '${object.runtimeType}'.");
@@ -42,8 +42,8 @@ class BuiltJsonSerializers implements Serializers {
4242

4343
@override
4444
Object deserialize(Object object,
45-
{FullType specifiedType: const FullType()}) {
46-
if (specifiedType.isObject) {
45+
{FullType specifiedType: FullType.unspecified}) {
46+
if (specifiedType.isUnspecified) {
4747
final wireName = (object as List).first;
4848

4949
final serializer = _wireNameToSerializer[wireName];

built_json/lib/src/built_list_serializer.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,12 @@ class BuiltListSerializer implements Serializer<BuiltList> {
1212

1313
@override
1414
Object serialize(Serializers serializers, BuiltList builtList,
15-
{FullType specifiedType: const FullType()}) {
15+
{FullType specifiedType: FullType.unspecified}) {
1616
final isUnderspecified =
17-
specifiedType.isObject || specifiedType.parameters.isEmpty;
17+
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
1818

19-
final valueGenericType = specifiedType.parameters.isEmpty
20-
? const FullType()
19+
final elementType = specifiedType.parameters.isEmpty
20+
? FullType.unspecified
2121
: specifiedType.parameters[0];
2222

2323
if (!isUnderspecified && !serializers.hasBuilder(specifiedType)) {
@@ -26,17 +26,17 @@ class BuiltListSerializer implements Serializer<BuiltList> {
2626
}
2727

2828
return builtList.map(
29-
(item) => serializers.serialize(item, specifiedType: valueGenericType));
29+
(item) => serializers.serialize(item, specifiedType: elementType));
3030
}
3131

3232
@override
3333
BuiltList deserialize(Serializers serializers, Object serialized,
34-
{FullType specifiedType: const FullType()}) {
34+
{FullType specifiedType: FullType.unspecified}) {
3535
final isUnderspecified =
36-
specifiedType.isObject || specifiedType.parameters.isEmpty;
36+
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
3737

38-
final valueGenericType = specifiedType.parameters.isEmpty
39-
? const FullType()
38+
final elementType = specifiedType.parameters.isEmpty
39+
? FullType.unspecified
4040
: specifiedType.parameters[0];
4141

4242
final result = isUnderspecified
@@ -47,7 +47,7 @@ class BuiltListSerializer implements Serializer<BuiltList> {
4747
'No builder for $specifiedType, cannot deserialize.');
4848
}
4949
result.addAll((serialized as Iterable).map((item) =>
50-
serializers.deserialize(item, specifiedType: valueGenericType)));
50+
serializers.deserialize(item, specifiedType: elementType)));
5151
return result.build();
5252
}
5353
}

built_json/lib/src/built_map_serializer.dart

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,15 @@ class BuiltMapSerializer implements Serializer<BuiltMap> {
1212

1313
@override
1414
Object serialize(Serializers serializers, BuiltMap builtMap,
15-
{FullType specifiedType: const FullType()}) {
15+
{FullType specifiedType: FullType.unspecified}) {
1616
final isUnderspecified =
17-
specifiedType.isObject || specifiedType.parameters.isEmpty;
17+
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
1818

19-
final keyTypes = specifiedType.parameters.isEmpty
20-
? const FullType()
19+
final keyType = specifiedType.parameters.isEmpty
20+
? FullType.unspecified
2121
: specifiedType.parameters[0];
22-
final valueTypes = specifiedType.parameters.isEmpty
23-
? const FullType()
22+
final valueType = specifiedType.parameters.isEmpty
23+
? FullType.unspecified
2424
: specifiedType.parameters[1];
2525

2626
if (!isUnderspecified && !serializers.hasBuilder(specifiedType)) {
@@ -29,24 +29,24 @@ class BuiltMapSerializer implements Serializer<BuiltMap> {
2929

3030
final result = <Object>[];
3131
for (final key in builtMap.keys) {
32-
result.add(serializers.serialize(key, specifiedType: keyTypes));
32+
result.add(serializers.serialize(key, specifiedType: keyType));
3333
final value = builtMap[key];
34-
result.add(serializers.serialize(value, specifiedType: valueTypes));
34+
result.add(serializers.serialize(value, specifiedType: valueType));
3535
}
3636
return result;
3737
}
3838

3939
@override
4040
BuiltMap deserialize(Serializers serializers, Object serialized,
41-
{FullType specifiedType: const FullType()}) {
41+
{FullType specifiedType: FullType.unspecified}) {
4242
final isUnderspecified =
43-
specifiedType.isObject || specifiedType.parameters.isEmpty;
43+
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
4444

45-
final keyTypes = specifiedType.parameters.isEmpty
46-
? const FullType()
45+
final keyType = specifiedType.parameters.isEmpty
46+
? FullType.unspecified
4747
: specifiedType.parameters[0];
48-
final valueTypes = specifiedType.parameters.isEmpty
49-
? const FullType()
48+
final valueType = specifiedType.parameters.isEmpty
49+
? FullType.unspecified
5050
: specifiedType.parameters[1];
5151

5252
final result = isUnderspecified
@@ -63,9 +63,9 @@ class BuiltMapSerializer implements Serializer<BuiltMap> {
6363
}
6464

6565
for (int i = 0; i != list.length; i += 2) {
66-
final key = serializers.deserialize(list[i], specifiedType: keyTypes);
66+
final key = serializers.deserialize(list[i], specifiedType: keyType);
6767
final value =
68-
serializers.deserialize(list[i + 1], specifiedType: valueTypes);
68+
serializers.deserialize(list[i + 1], specifiedType: valueType);
6969
result[key] = value;
7070
}
7171

built_json/lib/src/built_set_serializer.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,30 +12,30 @@ class BuiltSetSerializer implements Serializer<BuiltSet> {
1212

1313
@override
1414
Object serialize(Serializers serializers, BuiltSet builtSet,
15-
{FullType specifiedType: const FullType()}) {
15+
{FullType specifiedType: FullType.unspecified}) {
1616
final isUnderspecified =
17-
specifiedType.isObject || specifiedType.parameters.isEmpty;
17+
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
1818

19-
final valueGenericType = specifiedType.parameters.isEmpty
20-
? const FullType()
19+
final elementType = specifiedType.parameters.isEmpty
20+
? FullType.unspecified
2121
: specifiedType.parameters[0];
2222

2323
if (!isUnderspecified && !serializers.hasBuilder(specifiedType)) {
2424
throw new StateError('No builder for $specifiedType, cannot serialize.');
2525
}
2626

2727
return builtSet.map(
28-
(item) => serializers.serialize(item, specifiedType: valueGenericType));
28+
(item) => serializers.serialize(item, specifiedType: elementType));
2929
}
3030

3131
@override
3232
BuiltSet deserialize(Serializers serializers, Object serialized,
33-
{FullType specifiedType: const FullType()}) {
33+
{FullType specifiedType: FullType.unspecified}) {
3434
final isUnderspecified =
35-
specifiedType.isObject || specifiedType.parameters.isEmpty;
35+
specifiedType.isUnspecified || specifiedType.parameters.isEmpty;
3636

37-
final valueGenericType = specifiedType.parameters.isEmpty
38-
? const FullType()
37+
final elementType = specifiedType.parameters.isEmpty
38+
? FullType.unspecified
3939
: specifiedType.parameters[0];
4040
final result = isUnderspecified
4141
? new SetBuilder<Object>()
@@ -45,7 +45,7 @@ class BuiltSetSerializer implements Serializer<BuiltSet> {
4545
'No builder for $specifiedType, cannot deserialize.');
4646
}
4747
result.addAll((serialized as Iterable).map((item) =>
48-
serializers.deserialize(item, specifiedType: valueGenericType)));
48+
serializers.deserialize(item, specifiedType: elementType)));
4949
return result.build();
5050
}
5151
}

built_json/lib/src/double_serializer.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,13 @@ class DoubleSerializer implements Serializer<double> {
1313

1414
@override
1515
Object serialize(Serializers serializers, double aDouble,
16-
{FullType specifiedType: const FullType()}) {
16+
{FullType specifiedType: FullType.unspecified}) {
1717
return aDouble;
1818
}
1919

2020
@override
2121
double deserialize(Serializers serializers, Object serialized,
22-
{FullType specifiedType: const FullType()}) {
22+
{FullType specifiedType: FullType.unspecified}) {
2323
return (serialized as num).toDouble();
2424
}
2525
}

built_json/lib/src/int_serializer.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ class IntSerializer implements Serializer<int> {
1212

1313
@override
1414
Object serialize(Serializers serializers, int integer,
15-
{FullType specifiedType: const FullType()}) {
15+
{FullType specifiedType: FullType.unspecified}) {
1616
return integer;
1717
}
1818

1919
@override
2020
int deserialize(Serializers serializers, Object serialized,
21-
{FullType specifiedType: const FullType()}) {
21+
{FullType specifiedType: FullType.unspecified}) {
2222
return serialized as int;
2323
}
2424
}

built_json/lib/src/string_serializer.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ class StringSerializer implements Serializer<String> {
1212

1313
@override
1414
Object serialize(Serializers serializers, String string,
15-
{FullType specifiedType: const FullType()}) {
15+
{FullType specifiedType: FullType.unspecified}) {
1616
return string;
1717
}
1818

1919
@override
2020
String deserialize(Serializers serializers, Object serialized,
21-
{FullType specifiedType: const FullType()}) {
21+
{FullType specifiedType: FullType.unspecified}) {
2222
return serialized as String;
2323
}
2424
}

0 commit comments

Comments
 (0)