Skip to content

Commit 9ac11cc

Browse files
authored
Merge pull request #316 from davidmorgan/better-null-messages
Better null messages
2 parents 9ed4f0d + eaf24d6 commit 9ac11cc

32 files changed

+863
-249
lines changed

CHANGELOG.md

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
# Changelog
22

3-
## 4.5.3
3+
## 4.6.0
44

5+
- Add custom `Error` classes: `BuiltValueNullFieldError`,
6+
`BuiltValueMissingGenericsError` and `BuiltValueNestedFieldError`. These
7+
provide clearer error messages on failure. In particular, errors in nested
8+
builders now report the enclosing class and field name, making them much
9+
more useful.
510
- Fix serialization when using polymorphism with StandardJsonPlugin.
611

712
## 4.5.2

benchmark/lib/node.g.dart

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

benchmark/lib/simple_value.g.dart

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

built_value/lib/built_value.dart

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,3 +255,46 @@ class FlatBuiltValueToStringHelper implements BuiltValueToStringHelper {
255255
return stringResult;
256256
}
257257
}
258+
259+
/// [Error] indicating that a built_value class constructor was called with
260+
/// a `null` value for a field not marked `@nullable`.
261+
class BuiltValueNullFieldError extends Error {
262+
final String type;
263+
final String field;
264+
265+
BuiltValueNullFieldError(this.type, this.field);
266+
267+
@override
268+
String toString() =>
269+
'Tried to construct class "$type" with null field "$field". '
270+
'This is forbidden; to allow it, mark "$field" with @nullable.';
271+
}
272+
273+
/// [Error] indicating that a built_value class constructor was called with
274+
/// a missing or `dynamic` type parameter.
275+
class BuiltValueMissingGenericsError extends Error {
276+
final String type;
277+
final String parameter;
278+
279+
BuiltValueMissingGenericsError(this.type, this.parameter);
280+
281+
@override
282+
String toString() =>
283+
'Tried to construct class "$type" with missing or dynamic '
284+
'type argument "$parameter". All type arguments must be specified.';
285+
}
286+
287+
/// [Error] indicating that a built_value `build` method failed because a
288+
/// nested field builder failed.
289+
class BuiltValueNestedFieldError extends Error {
290+
final String type;
291+
final String field;
292+
final String error;
293+
294+
BuiltValueNestedFieldError(this.type, this.field, this.error);
295+
296+
@override
297+
String toString() =>
298+
'Tried to build class "$type" but nested builder for field "$field" '
299+
'threw: $error';
300+
}

built_value_generator/lib/src/enum_source_class.g.dart

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

built_value_generator/lib/src/enum_source_field.g.dart

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

built_value_generator/lib/src/enum_source_library.g.dart

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

built_value_generator/lib/src/memoized_getter.g.dart

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

built_value_generator/lib/src/serializer_source_class.g.dart

Lines changed: 2 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

built_value_generator/lib/src/serializer_source_field.g.dart

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

0 commit comments

Comments
 (0)