buildMirror method
Future<void>
buildMirror(
- ClassDeclaration clazz,
- MemberDeclarationBuilder builder
)
Implementation
Future<void> buildMirror(ClassDeclaration clazz, MemberDeclarationBuilder builder) async {
List<FieldDeclaration> properties = await validFields(clazz, builder);
List<MethodDeclaration> methods = await validMethods(clazz, builder);
builder.declareInType(DeclarationCode.fromString(asCode("""
/// Offers field reflection for the [${clazz.identifier.name}] object.
/// * Offers basic Type information
/// * You can get & set (via mutation) fields using the [MirrorField] object.
/// * You can obtain annotations from the [MirrorField] object.
static final ModelMirror<${clazz.identifier.name}> mirror = ModelMirror(List.unmodifiable([
${properties.map((i) => "MirrorField<${clazz.identifier.name}, ${i.type.fullName}>(\"${i.identifier.name.substring(1)}\", ${i.type.fullName}, (o) => o.${i.identifier.name.substring(1)}, (o, v) => o.mutate(${i.identifier.name.substring(1)}: v), const [${i.metadata.whereType<ConstructorMetadataAnnotation>().map((m) => reconstructAnnotation(m)).join(",")}])").join(",\n ")}
]), List.unmodifiable([
${methods.map((i) => "MirrorMethod<${clazz.identifier.name}>(\"${i.identifier.name}\", const [${i.metadata.whereType<ConstructorMetadataAnnotation>().map((m) => reconstructAnnotation(m)).join(",")}], (o, p) => o.${buildMethodCall(i)})").join(",\n ")}
]));
""")));
}