write method
String
write(
- BuildStep buildStep
)
Implementation
String write(BuildStep buildStep) {
DartEmitter emitter = DartEmitter.scoped();
var library = Library((b) {
b.body.addAll([
//生成类
Class((builder) {
builder.name = "ServiceProviderInternal";
builder.fields.addAll([
Field((fieldBuilder) {
fieldBuilder.name = "_cache";
fieldBuilder.type = refer("Map<Type, IService>");
fieldBuilder.modifier = FieldModifier.var$;
fieldBuilder.assignment = const Code("{}");
fieldBuilder.modifier = FieldModifier.final$;
})
]);
builder.methods.addAll(
//生成方法
[
Method((methodBuilder) {
methodBuilder.name = "getService";
methodBuilder.body = _generatorGetService(eachServiceInfoMaps);
methodBuilder.types.add(refer('T extends IService'));
methodBuilder.returns = refer('T');
}),
Method((methodBuilder) {
methodBuilder.name = "_getService";
methodBuilder.body = _generatorInnerGetService();
methodBuilder.types.add(refer('T extends IService'));
methodBuilder.requiredParameters.add(Parameter((builder) {
builder.name = "impl";
builder.type = refer('IService');
}));
methodBuilder.returns = refer('T');
})
],
);
}),
]);
//导入引用
b.directives.clear();
b.directives.addAll(allImportSet);
});
return DartFormatter().format('${library.accept(emitter)}');
}