mirror of
https://github.com/dart-lang/sdk
synced 2024-09-20 23:51:23 +00:00
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:
parent
dae0de9755
commit
5536a7e664
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue