Use AnalysisDriver.addedFiles for search, remove DriverAnalyzedFiles.

The client that uses Search - DAS, adds analyzed files.
Visiting the file system again to gather analyzed files is wasteful.
DAS now uses AnalysisContextCollection, so the same set of files.

Change-Id: I2b6ba4181e7ed8cda02db152086d13758ea6f4dd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/189381
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analysis_server/test/abstract_context.dart b/pkg/analysis_server/test/abstract_context.dart
index 2fa703a1f..a9baa35 100644
--- a/pkg/analysis_server/test/abstract_context.dart
+++ b/pkg/analysis_server/test/abstract_context.dart
@@ -18,6 +18,7 @@
 import 'package:analyzer/src/test_utilities/mock_sdk.dart';
 import 'package:analyzer/src/test_utilities/package_config_file_builder.dart';
 import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart';
+import 'package:analyzer/src/util/file_paths.dart' as file_paths;
 import 'package:linter/src/rules.dart';
 import 'package:meta/meta.dart';
 
@@ -174,6 +175,7 @@
       throw StateError('Only dart files can be changed after analysis.');
     }
 
+    _addAnalyzedFileToDrivers(path);
     return super.newFile(path, content: content);
   }
 
@@ -259,6 +261,28 @@
     writePackageConfig(path, config);
   }
 
+  void _addAnalyzedFilesToDrivers() {
+    for (var analysisContext in _analysisContextCollection.contexts) {
+      var driver = (analysisContext as DriverBasedAnalysisContext).driver;
+      for (var path in analysisContext.contextRoot.analyzedFiles()) {
+        if (file_paths.isDart(resourceProvider.pathContext, path)) {
+          driver.addFile(path);
+        }
+      }
+    }
+  }
+
+  void _addAnalyzedFileToDrivers(String path) {
+    if (_analysisContextCollection != null) {
+      for (var analysisContext in _analysisContextCollection.contexts) {
+        if (analysisContext.contextRoot.isAnalyzed(path)) {
+          var driver = (analysisContext as DriverBasedAnalysisContext).driver;
+          driver.addFile(path);
+        }
+      }
+    }
+  }
+
   /// Create all analysis contexts in [collectionIncludedPaths].
   void _createAnalysisContexts() {
     if (_analysisContextCollection != null) {
@@ -274,6 +298,7 @@
       sdkPath: convertPath(sdkRoot),
     );
 
+    _addAnalyzedFilesToDrivers();
     verifyCreatedCollection();
   }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
index b44ebfc..039dd8d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_late_test.dart
@@ -57,7 +57,6 @@
 ''', target: '/home/test/lib/a.dart');
   }
 
-  @FailingTest(reason: 'The lint does not fire for parts.')
   Future<void> test_changeInPart() async {
     addSource('/home/test/lib/a.dart', '''
 part 'test.dart';
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index fcaacb9..80c2790 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -248,8 +248,6 @@
   /// Whether resolved units should be indexed.
   final bool enableIndex;
 
-  late final DriverAnalyzedFiles analyzedFiles = DriverAnalyzedFiles(this);
-
   /// The current analysis session.
   late AnalysisSessionImpl _currentSession;
 
@@ -448,7 +446,6 @@
     if (!_fsState.hasUri(path)) {
       return;
     }
-    analyzedFiles.reset();
     if (file_paths.isDart(resourceProvider.pathContext, path)) {
       _fileTracker.addFile(path);
       // If the file is known, it has already been read, even if it did not
@@ -1203,7 +1200,6 @@
   /// but does not guarantee this.
   void removeFile(String path) {
     _throwIfNotAbsolutePath(path);
-    analyzedFiles.reset();
     _fileTracker.removeFile(path);
     clearLibraryContext();
     _priorityResults.clear();
@@ -2086,29 +2082,6 @@
             errors);
 }
 
-/// The cache of files analyzed in the driver.
-class DriverAnalyzedFiles {
-  final AnalysisDriver _driver;
-  List<String>? _files;
-
-  DriverAnalyzedFiles(this._driver);
-
-  List<String> get files {
-    var files = _files;
-
-    if (files == null) {
-      var contextRoot = _driver.analysisContext!.contextRoot;
-      _files = files = contextRoot.analyzedFiles().toList();
-    }
-
-    return files;
-  }
-
-  void reset() {
-    _files = null;
-  }
-}
-
 /// An object that watches for the creation and removal of analysis drivers.
 ///
 /// Clients may not extend, implement or mix-in this class.
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 03439d6..821ebf0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -503,7 +503,7 @@
   }
 
   void ownAnalyzed(Search search) {
-    for (var path in search._driver.analyzedFiles.files) {
+    for (var path in search._driver.addedFiles) {
       if (path.endsWith('.dart')) {
         add(path, search);
       }