Skip to content

Commit ff1181e

Browse files
committed
hive_generator: basic nullability awareness
* Only for built_value classes for reducing the amount of generated code to a reasonable level
1 parent 126ce0a commit ff1181e

File tree

1 file changed

+19
-6
lines changed

1 file changed

+19
-6
lines changed

hive_generator/lib/src/class_builder.dart

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ class ClassBuilder extends _ClassBuilderBase {
130130
field.type,
131131
'fields[${field.index}]',
132132
nestedBuilders: field.nestedBuilders,
133+
nullable: field.isNullable,
133134
)}');
134135
}
135136

@@ -141,6 +142,7 @@ class ClassBuilder extends _ClassBuilderBase {
141142
DartType type,
142143
String variable, {
143144
bool nestedBuilders,
145+
bool nullable = true,
144146
}) {
145147
String builderConstructor;
146148
String typeToBeCasted;
@@ -182,29 +184,40 @@ class ClassBuilder extends _ClassBuilderBase {
182184
'($castedVariable)'
183185
'${shouldBeBuilt ? '.build()' : ''}';
184186

187+
if (!nullable) {
188+
return buildExpression;
189+
}
190+
185191
return '$variable == null ? null : $buildExpression';
186192
}
187193

188194
@override
189195
String cast(
190196
DartType type,
191-
String variable, [
192-
bool nestedBuilders = false,
193-
]) {
197+
String variable, {
198+
bool nestedBuilders,
199+
bool nullable = true,
200+
}) {
194201
if (!isBuiltOrBuiltCollection(type) &&
195202
!isBuilderOrCollectionBuilder(type)) {
196203
// This value needs no special treatment.
197204
return super.cast(type, variable);
198205
}
199206

200-
if ((isBuilt(type) && nestedBuilders) || isBuilder(type)) {
207+
if ((isBuilt(type) && nestedBuilders == true) || isBuilder(type)) {
201208
// We need to call .toBuilder(), because variable is always an Built
202209
// value, but we need an Builder value.
203-
return '($variable as ${_displayString(type)})?.toBuilder()';
210+
final toBuilder = '${nullable ? '?' : ''}.toBuilder()';
211+
return '($variable as ${_displayString(type)})$toBuilder';
204212
}
205213

206214
if (isBuiltCollection(type) || isCollectionBuilder(type)) {
207-
return _castBuiltCollection(type, variable, nestedBuilders ?? false);
215+
return _castBuiltCollection(
216+
type,
217+
variable,
218+
nestedBuilders: nestedBuilders,
219+
nullable: nullable ?? true,
220+
);
208221
}
209222

210223
// We just need to cast the value. This happens when the type is of a Built

0 commit comments

Comments
 (0)