onGenerate method
Future<$BuildOutput>
onGenerate(
- ArtifactBuilder builder,
- ClassElement clazz,
- ConstructorElement ctor,
- List<
FormalParameterElement> params, - BuildStep step,
- List<
String> ? eFields,
override
Implementation
@override
Future<$BuildOutput> onGenerate(
ArtifactBuilder builder,
ClassElement clazz,
ConstructorElement ctor,
List<FormalParameterElement> params,
BuildStep step,
List<String>? eFields,
) async {
StringBuffer buf = StringBuffer();
List<Uri> importUris = <Uri>[];
LibraryElement targetLib = clazz.library;
buf.writeln(
" ${builder.applyDefsF("ArtifactModelExporter")} get to=>${builder.applyDefsF("ArtifactModelExporter")}(toMap);",
);
buf.write(" ${builder.applyDefsF("Map<String,dynamic>")} toMap(){");
buf.write("_;");
List<String> subs = builder.subclassesOf(clazz);
if (subs.isNotEmpty) {
for (String sub in subs) {
buf.write('if (_H is ${builder.applyDefsF(sub)}){');
buf.write('return (_H as ${builder.applyDefsF(sub)}).toMap();');
buf.write('}');
}
}
buf.write("return");
if (eFields != null) {
buf.write(" ${builder.applyDefsF("ArtifactSecurityUtil")}.q(");
}
buf.write(
'<${builder.applyDefsF("String")},${builder.applyDefsF("dynamic")}>{',
);
InterfaceType? supType = clazz.supertype;
while (supType != null) {
ClassElement sup = supType.element as ClassElement;
if (ArtifactBuilder.$artifactChecker.hasAnnotationOf(
sup,
throwOnUnresolved: false,
)) {
buf.write("${builder.stringD(subclassTagFor(sup))}: '${clazz.name}',");
}
supType = supType.element.supertype;
}
for (FormalParameterElement param in params) {
String name = paramName(param);
({String code, List<Uri> imports}) conv = builder.guardGeneration(
clazz: clazz,
stage: "to_map.convert",
param: param,
run:
() => builder.converter.$convert(
name,
param.type,
targetLib,
$ArtifactConvertMode.toMap,
),
);
String rn = builder.guardGeneration(
clazz: clazz,
stage: "to_map.rename",
param: param,
run: () => builder.renamedParamName(clazz, param),
);
buf.write("${builder.stringD(rn)}:${conv.code.trim()},");
importUris.addAll(conv.imports);
}
buf.write('}.\$nn');
if (eFields != null) {
buf.write(
",[${eFields.map((i) => builder.stringD(i)).join(",")}],\$artifactCipher);",
);
} else {
buf.write(';');
}
buf.writeln('}');
return (importUris, buf);
}