lookupByRohdLine method

List<({FlcEntry entry, String module, String signal})> lookupByRohdLine(
  1. String fileSuffix, {
  2. int? line,
})

Reverse lookup: find all (moduleName, signalName, entry) tuples whose ROHD source frames include the given fileSuffix and line.

fileSuffix is matched against the end of each frame's file path (e.g. 'serializer.dart' matches 'lib/src/serialization/serializer.dart'). When line is non-null only frames on that exact line match.

Implementation

List<({String module, String signal, FlcEntry entry})> lookupByRohdLine(
  String fileSuffix, {
  int? line,
}) {
  final results = <({String module, String signal, FlcEntry entry})>[];
  for (final modEntry in _signals.entries) {
    for (final sigEntry in modEntry.value.entries) {
      for (final frame in sigEntry.value.frames) {
        if (frame.file.endsWith(fileSuffix) &&
            (line == null || frame.line == line)) {
          results.add((
            module: modEntry.key,
            signal: sigEntry.key,
            entry: sigEntry.value,
          ));
          break; // one match per signal is enough
        }
      }
    }
  }
  for (final modEntry in _instances.entries) {
    for (final instEntry in modEntry.value.entries) {
      for (final frame in instEntry.value.frames) {
        if (frame.file.endsWith(fileSuffix) &&
            (line == null || frame.line == line)) {
          results.add((
            module: modEntry.key,
            signal: instEntry.key,
            entry: instEntry.value,
          ));
          break;
        }
      }
    }
  }
  return results;
}