Change MultiCorrectionProducer.producers to Stream.

In order to eventually remove DeclarationsTracker we would need to
switch Import Library fix to AnalysisDriver APIs that are async.

Change-Id: Ief1dea72d63e4b508dce05a66b7cb82893a8a996
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/221881
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2021-12-06 19:59:46 +00:00 committed by Commit Bot
parent ed9f6b0015
commit 4a51fffe45
12 changed files with 27 additions and 25 deletions

View file

@ -221,7 +221,7 @@ class AssistProcessor extends BaseProcessor {
for (var multiGenerator in multiGenerators) {
var multiProducer = multiGenerator();
multiProducer.configure(context);
for (var producer in multiProducer.producers) {
await for (var producer in multiProducer.producers) {
await compute(producer);
}
}

View file

@ -383,7 +383,7 @@ class BulkFixProcessor {
for (var multiGenerator in multiGenerators) {
var multiProducer = multiGenerator();
multiProducer.configure(context);
for (var producer in multiProducer.producers) {
await for (var producer in multiProducer.producers) {
await _generateFix(context, producer, codeName);
}
}

View file

@ -302,7 +302,7 @@ abstract class CorrectionProducerWithDiagnostic extends CorrectionProducer {
/// assists).
abstract class MultiCorrectionProducer extends _AbstractCorrectionProducer {
/// Return each of the individual producers generated by this producer.
Iterable<CorrectionProducer> get producers;
Stream<CorrectionProducer> get producers;
}
/// An object that can compute a correction (fix or assist) in a Dart file.

View file

@ -11,7 +11,7 @@ import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
class AddMissingParameter extends MultiCorrectionProducer {
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
// node is the unmatched argument.
var argumentList = node.parent;
if (argumentList is! ArgumentList) {

View file

@ -13,7 +13,7 @@ import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
class AddSuperConstructorInvocation extends MultiCorrectionProducer {
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
var targetConstructor = node.parent;
if (targetConstructor is! ConstructorDeclaration) {
return;

View file

@ -17,7 +17,7 @@ class ChangeArgumentName extends MultiCorrectionProducer {
static const _maxDistance = 4;
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
var namedContext = _getNamedParameterNames();
if (namedContext == null) {
return;

View file

@ -12,7 +12,7 @@ import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
class CreateConstructorSuper extends MultiCorrectionProducer {
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
var targetClassNode = node.thisOrAncestorOfType<ClassDeclaration>();
if (targetClassNode == null) {
return;

View file

@ -21,7 +21,7 @@ class DataDriven extends MultiCorrectionProducer {
static List<TransformSet>? transformSetsForTests;
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
var importedUris = <Uri>[];
var library = resolvedResult.libraryElement;
for (var importElement in library.imports) {

View file

@ -15,7 +15,7 @@ import 'package:analyzer_plugin/utilities/range_factory.dart';
class FlutterWrap extends MultiCorrectionProducer {
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
var widgetExpr = flutter.identifyWidgetExpression(node);
if (widgetExpr != null) {
var widgetType = widgetExpr.typeOrThrow;
@ -36,7 +36,7 @@ class FlutterWrap extends MultiCorrectionProducer {
yield* _wrapMultipleWidgets();
}
Iterable<CorrectionProducer> _wrapMultipleWidgets() sync* {
Stream<CorrectionProducer> _wrapMultipleWidgets() async* {
var selectionRange = SourceRange(selectionOffset, selectionLength);
var analyzer = SelectionAnalyzer(selectionRange);
resolvedResult.unit.accept(analyzer);

View file

@ -27,7 +27,7 @@ class ImportLibrary extends MultiCorrectionProducer {
ImportLibrary(this._importKind);
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
final node = this.node;
if (_importKind == _ImportKind.dartAsync) {
yield* _importLibrary(DartFixKind.IMPORT_ASYNC, Uri.parse('dart:async'));
@ -42,8 +42,8 @@ class ImportLibrary extends MultiCorrectionProducer {
} else if (_importKind == _ImportKind.forExtensionMember) {
/// Return producers that will import extensions that apply to the
/// [targetType] and that define a member with the given [memberName].
Iterable<CorrectionProducer> importMatchingExtensions(
String memberName, DartType? targetType) sync* {
Stream<CorrectionProducer> importMatchingExtensions(
String memberName, DartType? targetType) async* {
if (targetType == null) {
return;
}
@ -151,8 +151,8 @@ class ImportLibrary extends MultiCorrectionProducer {
return false;
}
Iterable<CorrectionProducer> _importExtensionInLibrary(
Uri uri, DartType targetType, String memberName) sync* {
Stream<CorrectionProducer> _importExtensionInLibrary(
Uri uri, DartType targetType, String memberName) async* {
// Look to see whether the library at the [uri] is already imported. If it
// is, then we can check the extension elements without needing to perform
// additional analysis.
@ -197,31 +197,33 @@ class ImportLibrary extends MultiCorrectionProducer {
/// path and a correction with a relative path are returned. If the
/// `prefer_relative_imports` lint rule is enabled, the relative path is
/// returned first.
Iterable<CorrectionProducer> _importLibrary(
Stream<CorrectionProducer> _importLibrary(
FixKind fixKind,
Uri library, {
bool includeRelativeFix = false,
}) {
if (!includeRelativeFix) {
return [_ImportAbsoluteLibrary(fixKind, library)];
return Stream.fromIterable([
_ImportAbsoluteLibrary(fixKind, library),
]);
}
if (isLintEnabled(LintNames.prefer_relative_imports)) {
return [
return Stream.fromIterable([
_ImportRelativeLibrary(fixKind, library),
_ImportAbsoluteLibrary(fixKind, library),
];
]);
} else {
return [
return Stream.fromIterable([
_ImportAbsoluteLibrary(fixKind, library),
_ImportRelativeLibrary(fixKind, library),
];
]);
}
}
Iterable<CorrectionProducer> _importLibraryForElement(
Stream<CorrectionProducer> _importLibraryForElement(
String name,
List<ElementKind> elementKinds,
List<TopLevelDeclarationKind> kinds2) sync* {
List<TopLevelDeclarationKind> kinds2) async* {
// ignore if private
if (name.startsWith('_')) {
return;

View file

@ -12,7 +12,7 @@ import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dar
class SurroundWith extends MultiCorrectionProducer {
@override
Iterable<CorrectionProducer> get producers sync* {
Stream<CorrectionProducer> get producers async* {
// If the node is the CompilationUnit, the selected statements must span multiple
// top level items and cannot be surrounded with anything.
if (node is CompilationUnit) {

View file

@ -1359,7 +1359,7 @@ class FixProcessor extends BaseProcessor {
for (var multiGenerator in multiGenerators) {
var multiProducer = multiGenerator();
multiProducer.configure(context);
for (var producer in multiProducer.producers) {
await for (var producer in multiProducer.producers) {
await compute(producer);
}
}