Skip to content

Commit 328e1d2

Browse files
committed
feat: add nullable accessors option to DogsGeneratorSettings
The feature can be enabled using the 'nullable_accessors' pubspec flag. Refs: #26
1 parent 9257195 commit 328e1d2

File tree

4 files changed

+16
-4
lines changed

4 files changed

+16
-4
lines changed

docs/basics/options.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ dogs:
1111
property_case: keep
1212
name_case: keep
1313
enum_case: keep
14+
nullable_accessors: false
1415
```
1516

1617
## Options
@@ -23,6 +24,8 @@ Defines the casing style for generated property names.
2324
Defines the casing style for generated class and enum serial names.
2425
#### `enum_case` (default: `keep`)
2526
Defines the casing style for generated enum values.
27+
#### `nullable_accessors` (default: `false`)
28+
Forces builder accessor nullability regardless of the field nullability.
2629

2730
## Casing Options
2831
- `keep`: Keep the original name.

packages/dogs_generator/lib/builders/converter_builder.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ class ConverterBuilder extends DogsAdapter<Serializable> {
137137
writeGeneratedConverter(element, structurized, constructorName, codeContext);
138138
if (structurized.fieldNames.isNotEmpty &&
139139
structurized.structure.conformity != StructureConformity.bean) {
140-
writeGeneratedBuilder(element, structurized, constructorName, codeContext);
140+
writeGeneratedBuilder(element, structurized, constructorName, codeContext, settings);
141141
writeGeneratedExtension(element, structurized, constructorName, codeContext);
142142
}
143143
}
@@ -279,7 +279,7 @@ If you wish to use class-level generics, please implement a TreeBaseConverterFac
279279
}
280280

281281
static void writeGeneratedBuilder(ClassElement2 element, StructurizeResult structurized,
282-
String constructorName, SubjectCodeContext codeContext) {
282+
String constructorName, SubjectCodeContext codeContext, DogsGeneratorSettings settings) {
283283
var emitter = DartEmitter();
284284
var copyWithFrontendName = "${element.displayName}\$Copy";
285285
var copyClazz = Class((builder) {
@@ -328,13 +328,13 @@ If you wish to use class-level generics, please implement a TreeBaseConverterFac
328328
..type = MethodType.setter
329329
..requiredParameters.add(Parameter((builder) => builder
330330
..name = "value"
331-
..type = Reference(element.type + (element.optional ? "?" : ""))))
331+
..type = Reference(element.type + ((element.optional || settings.nullableAccessors) ? "?" : ""))))
332332
..body = Code("\$values[$index] = value;")));
333333

334334
builder.methods.add(Method((builder) => builder
335335
..name = element.accessor
336336
..type = MethodType.getter
337-
..returns = Reference(element.type + (element.optional ? "?" : ""))
337+
..returns = Reference(element.type + ((element.optional || settings.nullableAccessors) ? "?" : ""))
338338
..lambda = true
339339
..body = Code("\$values[$index]")));
340340
}

packages/dogs_generator/lib/settings.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:recase/recase.dart';
44

55
class DogsGeneratorSettings {
66
bool isLibrary = false;
7+
bool nullableAccessors = false;
78
CasingType propertyCase = CasingType.keep;
89
CasingType nameCase = CasingType.keep;
910
CasingType enumCase = CasingType.keep;
@@ -39,6 +40,11 @@ class DogsGeneratorSettings {
3940
if (enumCasingValue is String) {
4041
settings.enumCase = CasingType.fromString(enumCasingValue);
4142
}
43+
44+
var nullableAccessorsValue = map["nullable_accessors"];
45+
if (nullableAccessorsValue is bool) {
46+
settings.nullableAccessors = nullableAccessorsValue;
47+
}
4248
}
4349
} catch (ex) {
4450
log.warning("Can't resolve package pubspec.yaml with error: $ex. Using default values.");

smoke/test1/pubspec.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,3 +21,6 @@ dev_dependencies:
2121

2222
lints: ^2.0.1
2323
test: ^1.23.1
24+
25+
dogs:
26+
nullable_accessors: true

0 commit comments

Comments
 (0)