write method

String write(
  1. 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)}');
}