analyzeFile method

Future<FileIr?> analyzeFile(
  1. String filePath
)

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,
  );
}