cbd61d792e
Fixes https://github.com/dart-lang/sdk/issues/62649 This change overhauls what the PluginServer does when it receives requests from DAS like watch events, overlay changes, setting context roots, and setting priority files, to use the AnalysisDriver APIs. These APIs provide a much smarter, more fine-grained mechanism for determining which files need to be re-analyzed. This requires a lot of changes that really don't seem obvious (or just, to me, they are not intuitive), because they relate to Streams being processed, drained, read, etc. So I'll summarize as much as I can: * In order to track that results coming from AnalysisDriver are definitely for the same AnalysisSession we are concerned with, at any given time, we add `_filesBeingAnalyzed` and `_filesBeingResolved`. These two maps are cleared any time the plugin isolate is notified of changes, so there is not a memory concern. * We add a `waitForIdle` method which is just used by tests occasionally, in order to ensure analysis is complete. * We tackle a related bug mentioned in the issue thread regarding adding or removing overlays without changing the source contents. There are now a few checks that old-content is not equal to new-content. * Due to the more async nature of reading events off of the analysis driver, we have to be more particular in tests about sending `AnalysisSetContextRootsParams` and reading from the notification stream, so there are a lot of changes in tests to re-position these calls. This results in massive savings in re-analysis time. Using the example in https://github.com/dart-lang/sdk/issues/62649, typing in the `build_runner/lib/src/logging/build_log_logger.dart` file, I see the following: * Before this fix, every keystroke results in 183 files being re-analyzed by the plugin (always 183). * After this fix: * keystrokes that do not result in a summary change (or maybe fine-grained deps analysis), like whitespace, results in 1 file being re-analyzed (the file I'm editing). * A keystroke that results in slightly changed summary, like changing an import to something invalid, results 2 or 4 files being re-analyzed. * A keystroke that changes the name of class BuildLogLogger (large change to summary) results in 9-10 files being re-analyzed. Change-Id: Ie35053b0d90457b5b4b53bc8803188def0308d2a Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/503040 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Samuel Rawlins <srawlins@google.com>