analyzer: Simplify finding-extensions for DartContextFixImpl

I'm not sure the history of this Extensions class, but in its
current form, it is unnecessary complexity. It is a class with a
single, final field, and a single method. The whole thing can be
inlined into the _single_ caller.


Change-Id: I3ae92383241d6f79be2d96eb52de5a7ecf661fd4
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/347063
Commit-Queue: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Auto-Submit: Samuel Rawlins <srawlins@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Sam Rawlins 2024-01-19 17:59:35 +00:00 committed by Commit Queue
parent 1fc755eb54
commit 74a4d59bba
2 changed files with 24 additions and 50 deletions

View file

@ -3,11 +3,12 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analysis_server/plugin/edit/fix/fix_dart.dart';
import 'package:analysis_server/src/services/correction/fix/dart/extensions.dart';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/error/error.dart';
import 'package:analyzer/instrumentation/service.dart';
import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
import 'package:analyzer/src/dart/analysis/file_state_filter.dart';
import 'package:analyzer/src/services/top_level_declarations.dart';
import 'package:analyzer_plugin/utilities/change_builder/change_workspace.dart';
import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
@ -65,8 +66,28 @@ class DartFixContextImpl implements DartFixContext {
}
@override
Stream<LibraryElement> librariesWithExtensions(String memberName) {
return Extensions(resolveResult).libraries(memberName);
Stream<LibraryElement> librariesWithExtensions(String memberName) async* {
var analysisContext = resolveResult.session.analysisContext;
var analysisDriver = (analysisContext as DriverBasedAnalysisContext).driver;
await analysisDriver.discoverAvailableFiles();
var fsState = analysisDriver.fsState;
var filter = FileStateFilter(
fsState.getFileForPath(resolveResult.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;
}
yield elementResult.element;
}
}
}

View file

@ -1,47 +0,0 @@
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:async';
import 'package:analyzer/dart/analysis/results.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
import 'package:analyzer/src/dart/analysis/file_state_filter.dart';
class Extensions {
final ResolvedUnitResult resolvedUnit;
Extensions(this.resolvedUnit);
DriverBasedAnalysisContext get _analysisContext {
var analysisContext = resolvedUnit.session.analysisContext;
return analysisContext as DriverBasedAnalysisContext;
}
/// Return libraries that may be imported into the [resolvedUnit] file,
/// and might have extensions that define a non-static public member with
/// the [memberName].
Stream<LibraryElement> libraries(String memberName) async* {
var analysisDriver = _analysisContext.driver;
await analysisDriver.discoverAvailableFiles();
var fsState = analysisDriver.fsState;
var filter = FileStateFilter(
fsState.getFileForPath(resolvedUnit.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;
}
yield elementResult.element;
}
}
}