librariesWithExtensions method

Stream<LibraryElement> librariesWithExtensions(
  1. Name memberName
)

Returns libraries with extensions that declare non-static public extension members with the memberName.

Implementation

Stream<LibraryElement> librariesWithExtensions(Name memberName) async* {
  var analysisContext = unitResult.session.analysisContext;
  if (analysisContext is! DriverBasedAnalysisContext) {
    return;
  }

  var analysisDriver = analysisContext.driver;
  await analysisDriver.discoverAvailableFiles();

  var fsState = analysisDriver.fsState;
  var filter = FileStateFilter(fsState.getFileForPath(unitResult.path));

  for (var file in fsState.knownFiles.toList()) {
    if (!filter.shouldInclude(file)) {
      continue;
    }

    var elementResult = await analysisDriver.getLibraryByUri(file.uriStr);
    if (elementResult is! LibraryElementResult) {
      continue;
    }

    if (elementResult.element.exportedExtensions
        .havingMemberWithBaseName(memberName)
        .isNotEmpty) {
      yield elementResult.element;
    }
  }
}