build method
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}');
}
}