generate method
Implementation
Future<$BuildOutput> generate(ClassElement clazz, BuildStep step) async {
compression =
$artifactChecker
.firstAnnotationOf(clazz, throwOnUnresolved: false)
?.getField("compression")
?.toBoolValue() ??
false;
ConstructorElement? ctor = clazz.defaultConstructor;
if (ctor == null) return (<Uri>[], StringBuffer());
List<FormalParameterElement> params = ctor.aParams;
List<String>? eAFields;
Set<String> eFields = {};
Set<String> rFields = {};
DartObject? eAnn = $encryptChecker.firstAnnotationOf(
clazz,
throwOnUnresolved: false,
);
if (eAnn != null) {
if (eAnn.getField("encrypt")?.toBoolValue() == true) {
eFields = params.map((i) => i.name).whereType<String>().toSet();
} else {
rFields = params.map((i) => i.name).whereType<String>().toSet();
}
}
for (FormalParameterElement p in params) {
if (p.name == null) {
continue;
}
FieldElement? f = clazz.getField(p.name!);
if (f == null) {
continue;
}
DartObject? pAnn = $encryptChecker.firstAnnotationOf(
f,
throwOnUnresolved: false,
);
if (pAnn != null) {
if (pAnn.getField("encrypt")?.toBoolValue() == true && p.name != null) {
eFields.add(p.name!);
} else if (p.name != null) {
rFields.add(p.name!);
}
}
}
if (eFields.isNotEmpty || rFields.isNotEmpty) {
eAFields =
params.map((i) => i.name).whereType<String>().diff(eFields).toList();
}
Future<$BuildOutput> _component(
String name,
$ArtifactBuilderOutput component,
) {
return guardGenerationAsync(
clazz: clazz,
stage: "component:$name",
run:
() =>
component.onGenerate(this, clazz, ctor, params, step, eAFields),
);
}
return (
<Uri>[],
StringBuffer()
..writeln(
"extension \$${clazz.name} on ${applyDefsF(clazz.name ?? "")}{",
)
..writeln(" ${applyDefsF(clazz.name ?? "")} get _H=>this;"),
)
.mergeWith(
await Future.wait([
_component("to_map", const $ArtifactToMapComponent()),
_component("from_map", const $ArtifactFromMapComponent()),
_component("copy_with", const $ArtifactCopyWithComponent()),
_component("instance", const $ArtifactInstanceComponent()),
if ($artifactChecker
.firstAnnotationOf(clazz, throwOnUnresolved: false)
?.getField("reflection")
?.toBoolValue() ??
false)
_component("reflector", const $ArtifactReflectorComponent()),
if ($artifactChecker
.firstAnnotationOf(clazz, throwOnUnresolved: false)
?.getField("generateSchema")
?.toBoolValue() ??
false)
_component("schema", const $ArtifactSchemaComponent()),
]).then((i) => i.merged),
)
.mergeWith((<Uri>[], StringBuffer()..write("}")));
}