structurizeBuilt function
Future<IRStructure>
structurizeBuilt(
- SubjectCodeContext codeContext,
- SubjectGenContext<
Element2> context, - ClassElement2 element
Implementation
Future<IRStructure> structurizeBuilt(
SubjectCodeContext codeContext, SubjectGenContext context, ClassElement2 element) async {
var counter = codeContext.cachedCounter;
var builtInterfaceImpl = element.thisType.asInstanceOf2(builtInterface)!;
var builderElement = builtInterfaceImpl.typeArguments[1].element3! as ClassElement2;
var getters =
builderElement.getters2.where((element) => element.isPublic && !element.isStatic).toList();
var fields = <IRStructureField>[];
for (var builderGetter in getters) {
var fieldGetter = element.getGetter2(builderGetter.displayName)!;
var fieldName = fieldGetter.displayName;
var fieldType = fieldGetter.returnType;
var serialType = await getSerialType(fieldType, context);
var iterableType = await getIterableType(fieldType, context);
var optional = fieldType.nullabilitySuffix == NullabilitySuffix.question;
if (fieldType is DynamicType) optional = true;
var builtValueFieldAnnotation = fieldGetter.metadata2.annotations
.whereTypeChecker(builtValueFieldChecker)
.firstOrNull
?.computeConstantValue();
var propertyName = fieldName;
if (builtValueFieldAnnotation != null) {
var reader = ConstantReader(builtValueFieldAnnotation);
var wireName = reader.read("wireName");
if (!wireName.isNull) propertyName = wireName.stringValue;
}
fields.add(IRStructureField(
fieldName,
counter.get(fieldType),
getTypeTree(fieldType).code(counter),
"null",
counter.get(serialType),
iterableType,
propertyName,
optional,
!isDogPrimitiveType(serialType),
getRetainedAnnotationSourceArray(fieldGetter, counter),
lyell.mapChecker.isAssignableFromType(fieldType)));
}
return IRStructure(
codeContext.className(element),
StructureConformity.basic,
element.displayName,
fields,
getRetainedAnnotationSourceArray(element, counter),
);
}