create static method

Future<MissingModulesException> create(
  1. Set<AssetId> missingSources,
  2. Iterable<Module> transitiveModules,
  3. AssetReader reader
)

Implementation

static Future<MissingModulesException> create(Set<AssetId> missingSources,
    Iterable<Module> transitiveModules, AssetReader reader) async {
  var buffer = StringBuffer('''
Unable to find modules for some sources, this is usually the result of either a
bad import, a missing dependency in a package (or possibly a dev_dependency
needs to move to a real dependency), or a build failure (if importing a
generated file).

Please check the following imports:\n
''');

  var checkedSourceDependencies = <AssetId, Set<AssetId>>{};
  for (var module in transitiveModules) {
    var missingIds = module.directDependencies.intersection(missingSources);
    for (var missingId in missingIds) {
      var checkedAlready =
          checkedSourceDependencies.putIfAbsent(missingId, () => <AssetId>{});
      for (var sourceId in module.sources) {
        if (checkedAlready.contains(sourceId)) {
          continue;
        }
        checkedAlready.add(sourceId);
        var message =
            await _missingImportMessage(sourceId, missingId, reader);
        if (message != null) buffer.writeln(message);
      }
    }
  }

  return MissingModulesException._(buffer.toString());
}