OtherMethodInfo.create constructor
OtherMethodInfo.create(
- MethodElement methodElement,
- ConstantReader reader
工厂方法:从方法元素和注解 ConstantReader 创建 OtherMethodInfo
Implementation
factory OtherMethodInfo.create(
MethodElement methodElement,
ConstantReader reader,
) {
final returnType = methodElement.returnType.genericsName;
final typeIsNull =
(methodElement.returnType.nullabilitySuffix ==
NullabilitySuffix.question);
// 在analyzer 8.1.1版本中,parameters属性仍然可用,但返回类型可能有变化
final methodParams = methodElement.formalParameters.map((param) {
return {
'type': param.type.genericsName,
'typeIsNull':
(param.type.nullabilitySuffix == NullabilitySuffix.question),
'name': param.name,
};
}).toList();
final Map<String, dynamic> templateData = {
'methodName': methodElement.name,
'returnType': returnType == 'void' ? null : returnType,
'returnTypeIsNull': typeIsNull,
'methodParams': methodParams,
'isAsync': methodElement.firstFragment.isAsynchronous,
};
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 OtherMethodInfo(
methodElement.name!,
returnType,
typeIsNull,
methodParams,
reader
.read('classCode')
.stringValueOrNull
?.let((it) => Template(it).render(templateData)),
reader.read('isAsync').boolValue,
reader
.read('funCode')
.stringValue
.let((it) => Template(it).render(templateData)),
reader
.read('valueUpdateListenerFunCode')
.stringValueOrNull
?.let((it) => Template(it).render(templateData)),
);
}