Index: pkg/analyzer/lib/src/dart/analysis/driver.dart |
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart |
index 517f582e2ca79af502ea5b7a4e9dd9d3ec3f2979..cb2b81faa35d01207a892c97a59b00bc5ff78b0f 100644 |
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart |
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart |
@@ -477,16 +477,8 @@ class AnalysisDriver { |
return null; |
} |
- // Prepare the key for the cached result. |
- String key = _getResolvedUnitKey(libraryFile, file); |
- if (key == null) { |
- _logger.run('Compute the dependency hash for $path', () { |
- _createLibraryContext(libraryFile); |
- key = _getResolvedUnitKey(libraryFile, file); |
- }); |
- } |
- |
// Check for the cached result. |
+ String key = _getResolvedUnitKey(libraryFile, file); |
List<int> bytes = _byteStore.get(key); |
if (bytes != null) { |
return _getAnalysisResultFromBytes(file, bytes); |
@@ -555,71 +547,62 @@ class AnalysisDriver { |
} |
/** |
- * Return the context in which the library represented by the given |
- * [libraryFile] should be analyzed it. |
+ * Return the context in which the [library] should be analyzed it. |
* |
* TODO(scheglov) We often don't need [SummaryDataStore], only dependency |
* signature. |
*/ |
- _LibraryContext _createLibraryContext(FileState libraryFile) { |
+ _LibraryContext _createLibraryContext(FileState library) { |
return _logger.run('Create library context', () { |
- Map<String, _LibraryNode> nodes = <String, _LibraryNode>{}; |
+ Map<String, FileState> libraries = <String, FileState>{}; |
SummaryDataStore store = new SummaryDataStore(const <String>[]); |
store.addBundle(null, _sdkBundle); |
- _LibraryNode createLibraryNodes(FileState libraryFile) { |
- Uri libraryUri = libraryFile.uri; |
- |
+ void appendLibraryFiles(FileState library) { |
// URIs with the 'dart:' scheme are served from the SDK bundle. |
- if (libraryUri.scheme == 'dart') { |
+ if (library.uri.scheme == 'dart') { |
return null; |
} |
- String libraryUriStr = libraryUri.toString(); |
- _LibraryNode node = nodes[libraryUriStr]; |
- if (node == null) { |
- node = new _LibraryNode(this, libraryFile, libraryUri); |
- nodes[libraryUriStr] = node; |
+ if (!libraries.containsKey(library.uriStr)) { |
+ libraries[library.uriStr] = library; |
// Append the defining unit. |
{ |
- UnlinkedUnit unlinked = libraryFile.unlinked; |
- _addToStoreUnlinked(store, libraryFile.uri, unlinked); |
+ UnlinkedUnit unlinked = library.unlinked; |
+ _addToStoreUnlinked(store, library.uri, unlinked); |
} |
// Append parts. |
- for (FileState part in libraryFile.partedFiles) { |
+ for (FileState part in library.partedFiles) { |
UnlinkedUnit unlinked = part.unlinked; |
_addToStoreUnlinked(store, part.uri, unlinked); |
} |
- // Create nodes for referenced libraries. |
- libraryFile.importedFiles.forEach(createLibraryNodes); |
- libraryFile.exportedFiles.forEach(createLibraryNodes); |
+ // Append referenced libraries. |
+ library.importedFiles.forEach(appendLibraryFiles); |
+ library.exportedFiles.forEach(appendLibraryFiles); |
} |
- |
- // Done with this node. |
- return node; |
} |
- _LibraryNode libraryNode = _logger.run('Compute library nodes', () { |
- return createLibraryNodes(libraryFile); |
+ _logger.run('Append library files', () { |
+ return appendLibraryFiles(library); |
}); |
Set<String> libraryUrisToLink = new Set<String>(); |
_logger.run('Load linked bundles', () { |
- for (_LibraryNode node in nodes.values) { |
- String key = '${node.dependencySignature}.linked'; |
+ for (FileState library in libraries.values) { |
+ String key = '${library.transitiveSignature}.linked'; |
List<int> bytes = _byteStore.get(key); |
if (bytes != null) { |
PackageBundle linked = new PackageBundle.fromBuffer(bytes); |
_addToStoreLinked( |
- store, node.file.uri.toString(), linked.linkedLibraries.single); |
+ store, library.uriStr, linked.linkedLibraries.single); |
} else { |
- libraryUrisToLink.add(node.uri.toString()); |
+ libraryUrisToLink.add(library.uriStr); |
} |
} |
- int numOfLoaded = nodes.length - libraryUrisToLink.length; |
+ int numOfLoaded = libraries.length - libraryUrisToLink.length; |
_logger.writeln('Loaded $numOfLoaded linked bundles.'); |
}); |
@@ -636,8 +619,8 @@ class AnalysisDriver { |
}); |
linkedLibraries.forEach((uri, linkedBuilder) { |
- _LibraryNode node = nodes[uri]; |
- String key = '${node.dependencySignature}.linked'; |
+ FileState library = libraries[uri]; |
+ String key = '${library.transitiveSignature}.linked'; |
List<int> bytes; |
{ |
PackageBundleAssembler assembler = new PackageBundleAssembler(); |
@@ -649,7 +632,7 @@ class AnalysisDriver { |
_byteStore.put(key, bytes); |
}); |
- return new _LibraryContext(libraryFile, libraryNode, store); |
+ return new _LibraryContext(library, store); |
}); |
} |
@@ -1136,29 +1119,6 @@ class PerformanceLogSection { |
*/ |
class _LibraryContext { |
final FileState file; |
- final _LibraryNode node; |
final SummaryDataStore store; |
- _LibraryContext(this.file, this.node, this.store); |
-} |
- |
-class _LibraryNode { |
- final AnalysisDriver driver; |
- final FileState file; |
- final Uri uri; |
- |
- _LibraryNode(this.driver, this.file, this.uri); |
- |
- String get dependencySignature { |
- return file.transitiveSignature; |
- } |
- |
- @override |
- int get hashCode => uri.hashCode; |
- |
- bool operator ==(other) { |
- return other is _LibraryNode && other.uri == uri; |
- } |
- |
- @override |
- String toString() => uri.toString(); |
+ _LibraryContext(this.file, this.store); |
} |