analyzeFile method
Analyzes a single file and returns its IR.
Implementation
Future<FileIr?> analyzeFile(String filePath) async {
final resolved = await _loader.resolveFile(filePath);
if (resolved == null) return null;
final collector = _DeclarationCollector();
resolved.unit.accept(collector);
final functions = <FunctionIr>[];
final classes = <ClassIr>[];
// Process top-level functions
for (final func in collector.functions) {
final ir = _buildFunctionIr(func, filePath, null);
if (ir != null) {
functions.add(ir);
}
}
// Process classes
for (final cls in collector.classes) {
final classIr = _buildClassIr(cls, filePath);
classes.add(classIr);
}
// Process mixins (ADR-015 1.1)
for (final mixin in collector.mixins) {
final mixinIr = _buildMixinIr(mixin, filePath);
classes.add(mixinIr);
}
// Process extensions (ADR-015 1.1)
for (final ext in collector.extensions) {
final extIr = _buildExtensionIr(ext, filePath);
classes.add(extIr);
}
// Process enums with methods (ADR-015 1.2)
for (final enumDecl in collector.enums) {
final enumIr = _buildEnumIr(enumDecl, filePath);
if (enumIr.methods.isNotEmpty) {
classes.add(enumIr);
}
}
return FileIr(
filePath: filePath,
functions: functions,
classes: classes,
);
}