Fix O(n^2) in collectAffected().

I will try to optimize it further later, but for now O(n) even
thought with somewhat high coefficient should be good enough.

Change-Id: Ia73a34c86e1da90ea4188340aa43983d79732392
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/215002
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
Konstantin Shcheglov 2021-09-29 18:12:32 +00:00 committed by commit-bot@chromium.org
parent dae0de9755
commit 5536a7e664

View file

@ -772,10 +772,19 @@ class FileSystemState {
void collectAffected(String path, Set<FileState> affected) {
final knownFiles = this.knownFiles.toList();
final fileToReferences = <FileState, List<FileState>>{};
for (var file in knownFiles) {
for (var referenced in file.directReferencedFiles) {
var references = fileToReferences[referenced] ??= [];
references.add(file);
}
}
collectAffected(FileState file) {
if (affected.add(file)) {
for (var other in knownFiles) {
if (other.directReferencedFiles.contains(file)) {
var references = fileToReferences[file];
if (references != null) {
for (var other in references) {
collectAffected(other);
}
}