FieldInterceptInfo.create constructor
FieldInterceptInfo.create(
- FieldInfo fieldInfo,
- FieldElement field,
- ConstantReader reader
工厂方法:从字段和注解 ConstantReader 创建 FieldInterceptInfo
通过 Mustache 模板渲染注解中的代码片段,动态生成对应的代码字符串。
Implementation
factory FieldInterceptInfo.create(
FieldInfo fieldInfo,
FieldElement field,
ConstantReader reader,
) {
final templateData = {
"name": field.name,
"type": field.type.genericsName,
'typeIsNull':
(field.type.nullabilitySuffix == NullabilitySuffix.question),
"keyName": fieldInfo.keyName,
"keyType": fieldInfo.type,
"keyTypeIsNull": fieldInfo.typeIsNull,
};
FConfigAnnotationFieldInfo.create(reader).let((it) {
for (var field in it.fields) {
final fieldElement = reader.read(field);
if (fieldElement.isNull) {
templateData[field] = [];
return;
}
templateData[field] = fieldElement.objectValue.parsedValue;
}
});
return FieldInterceptInfo(
field.name!,
field.type.genericsName,
(field.type.nullabilitySuffix == NullabilitySuffix.question),
fieldInfo.keyName,
fieldInfo.type,
fieldInfo.typeIsNull,
reader
.read('classCode')
.stringValueOrNull
?.let((it) => Template(it).render(templateData)),
reader
.read('getFieldCode')
.stringValueOrNull
?.let((it) => Template(it).render(templateData)),
reader
.read('setFieldCode')
.stringValueOrNull
?.let((it) => Template(it).render(templateData)),
reader
.read('valueUpdateListenerFunCode')
.stringValueOrNull
?.let((it) => Template(it).render(templateData)),
);
}