build method

  1. @override
Future<void> build(
  1. BuildStep buildStep
)

Generates the outputs for a given BuildStep.

Implementation

@override
Future<void> build(BuildStep buildStep) async {
  log.info('[EventConfigBuilder] Processing: ${buildStep.inputId.path}');

  // 只处理lib/**/*.dart文件,排除生成的文件
  if (!buildStep.inputId.path.startsWith('lib/') ||
      buildStep.inputId.path.contains('.g.dart') ||
      buildStep.inputId.path.contains('generated/')) {
    log.fine('[EventConfigBuilder] Skipping: ${buildStep.inputId.path}');
    return;
  }

  final content = await buildStep.readAsString(buildStep.inputId);
  final visitor = EventConfigVisitor();

  try {
    final parseResult = parseString(content: content);
    parseResult.unit.accept(visitor);
  } catch (e) {
    log.warning('[EventConfigBuilder] Failed to parse ${buildStep.inputId.path}: $e');
    return;
  }

  // 如果找到了EventConfig注解,收集配置
  if (visitor.eventConfigs.isNotEmpty) {
    log.info('[EventConfigBuilder] Found ${visitor.eventConfigs.length} EventConfig annotations in ${buildStep.inputId.path}');
    log.info('[EventConfigBuilder] Configurations: ${visitor.eventConfigs}');

    // 为每个文件生成一个临时配置文件
    final tempConfigId = buildStep.inputId.changeExtension('.tcmpp_event_config.json');
    final jsonOutput = const JsonEncoder.withIndent('  ').convert(visitor.eventConfigs);
    await buildStep.writeAsString(tempConfigId, jsonOutput);
    log.info('[EventConfigBuilder] Written config to: ${tempConfigId.path}');
  } else {
    log.fine('[EventConfigBuilder] No EventConfig annotations found in ${buildStep.inputId.path}');
  }
}