Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(233)

Unified Diff: pkg/front_end/lib/src/incremental/file_state.dart

Issue 3009683002: Remember direct dependencies in LibraryCycle. (Closed)
Patch Set: Created 3 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/front_end/test/src/incremental/file_state_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/front_end/lib/src/incremental/file_state.dart
diff --git a/pkg/front_end/lib/src/incremental/file_state.dart b/pkg/front_end/lib/src/incremental/file_state.dart
index cb0a0d6d44254af58f384173d25a2bb8dc5431e7..e02c7b5139b5d339e1deb3443d5a901112426825 100644
--- a/pkg/front_end/lib/src/incremental/file_state.dart
+++ b/pkg/front_end/lib/src/incremental/file_state.dart
@@ -10,9 +10,9 @@ import 'package:convert/convert.dart';
import 'package:crypto/crypto.dart';
import 'package:front_end/file_system.dart';
import 'package:front_end/src/base/resolve_relative_uri.dart';
+import 'package:front_end/src/byte_store/byte_store.dart';
import 'package:front_end/src/dependency_walker.dart' as graph;
import 'package:front_end/src/fasta/uri_translator.dart';
-import 'package:front_end/src/byte_store/byte_store.dart';
import 'package:front_end/src/incremental/format.dart';
import 'package:front_end/src/incremental/unlinked_unit.dart';
import 'package:kernel/target/targets.dart';
@@ -379,8 +379,10 @@ class FileSystemState {
class LibraryCycle {
final List<FileState> libraries = <FileState>[];
- /// [LibraryCycle]s that contain libraries directly import or export
- /// this [LibraryCycle].
+ /// The cycles this cycle directly depends on.
+ final Set<LibraryCycle> directDependencies = new Set<LibraryCycle>();
+
+ /// The cycles that directly import or export this cycle.
final List<LibraryCycle> directUsers = <LibraryCycle>[];
bool get _isForVm {
@@ -486,8 +488,8 @@ class _LibraryNode extends graph.Node<_LibraryNode> {
/// sorted [LibraryCycle]s.
class _LibraryWalker extends graph.DependencyWalker<_LibraryNode> {
final nodesOfFiles = <FileState, _LibraryNode>{};
- final topologicallySortedCycles = <LibraryCycle>[];
final fileToCycleMap = <FileState, LibraryCycle>{};
+ final topologicallySortedCycles = <LibraryCycle>[];
@override
void evaluate(_LibraryNode v) {
@@ -498,30 +500,35 @@ class _LibraryWalker extends graph.DependencyWalker<_LibraryNode> {
void evaluateScc(List<_LibraryNode> scc) {
var cycle = new LibraryCycle();
- // Build the set of cycles this cycle directly depends on.
- var directDependencies = new Set<LibraryCycle>();
+ // Compute direct dependencies.
for (var node in scc) {
var file = node.file;
for (var importedLibrary in file.importedLibraries) {
var importedCycle = fileToCycleMap[importedLibrary];
- if (importedCycle != null) directDependencies.add(importedCycle);
+ if (importedCycle != null) {
+ cycle.directDependencies.add(importedCycle);
+ }
}
for (var exportedLibrary in file.exportedLibraries) {
var exportedCycle = fileToCycleMap[exportedLibrary];
- if (exportedCycle != null) directDependencies.add(exportedCycle);
+ if (exportedCycle != null) {
+ cycle.directDependencies.add(exportedCycle);
+ }
}
}
// Register this cycle as a direct user of the direct dependencies.
- for (var directDependency in directDependencies) {
+ for (var directDependency in cycle.directDependencies) {
directDependency.directUsers.add(cycle);
}
+ // Fill the cycle with libraries.
for (var node in scc) {
node.isEvaluated = true;
cycle.libraries.add(node.file);
fileToCycleMap[node.file] = cycle;
}
+
topologicallySortedCycles.add(cycle);
}
« no previous file with comments | « no previous file | pkg/front_end/test/src/incremental/file_state_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698