collect method

Future<void> collect(
  1. Element element,
  2. ConstantReader annotation,
  3. BuildStep buildStep
)

Implementation

Future<void> collect(
    Element element, ConstantReader annotation, BuildStep buildStep) async {
  if (element.kind == ElementKind.CLASS) {
    final interfaceElement = annotation.read("service").typeValue.element;
    if (interfaceElement == null) {
      return;
    }
    String implStr = element.declaration!.displayName;
    String interfaceStr = interfaceElement.displayName;
    final List<String> importList = [];
    String implPackagePath = buildStep.inputId.uri.toString();
    importList.add(implPackagePath);
    importList.add(interfaceElement.librarySource!.uri.toString());
    // 每一个服务对应一个实例
    EachServiceInfo info = EachServiceInfo(importList, interfaceStr, implStr);
    if (!eachServiceInfoMaps.containsKey(interfaceStr)) {
      eachServiceInfoMaps[interfaceStr] = info;
    } else {
      throw Exception("""
================================service.erro============================================
You have registered two identical services, please check for errors!!!!,service:$interfaceStr
=============================================================================================
          """);
    }
  }
}