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

Unified Diff: pkg/analyzer/lib/src/dart/analysis/driver.dart

Issue 2517513005: Compute and flush only affected transitive signatures in FileState. (Closed)
Patch Set: Created 4 years, 1 month 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
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 7486496bc19c246b785ccd56d3ed82c5b6c2035f..1b467944638d5a9e8f4ebf4ab2ed1a4634ba14b5 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -176,11 +176,6 @@ class AnalysisDriver {
final _resultController = new StreamController<AnalysisResult>();
/**
- * Mapping from library URIs to the dependency signature of the library.
- */
- final _dependencySignatureMap = <Uri, String>{};
-
- /**
* The instance of the status helper.
*/
final StatusSupport _statusSupport = new StatusSupport();
@@ -202,8 +197,15 @@ class AnalysisDriver {
: _sourceFactory = sourceFactory.clone() {
_fillSalt();
_sdkBundle = sourceFactory.dartSdk.getLinkedBundle();
- _fsState = new FileSystemState(_logger, _byteStore, _contentOverlay,
- _resourceProvider, _sourceFactory, _analysisOptions, _salt);
+ _fsState = new FileSystemState(
+ _logger,
+ _byteStore,
+ _contentOverlay,
+ _resourceProvider,
+ _sourceFactory,
+ _analysisOptions,
+ _salt,
+ _sdkBundle.apiSignature);
_scheduler._add(this);
}
@@ -687,15 +689,11 @@ class AnalysisDriver {
* not known yet.
*/
String _getResolvedUnitKey(FileState library, FileState file) {
- String dependencyHash = _dependencySignatureMap[library.uri];
- if (dependencyHash != null) {
- ApiSignature signature = new ApiSignature();
- signature.addUint32List(_salt);
- signature.addString(dependencyHash);
- signature.addString(file.contentHash);
- return '${signature.toHex()}.resolved';
- }
- return null;
+ ApiSignature signature = new ApiSignature();
+ signature.addUint32List(_salt);
+ signature.addString(library.transitiveSignature);
+ signature.addString(file.contentHash);
+ return '${signature.toHex()}.resolved';
}
/**
@@ -799,7 +797,7 @@ class AnalysisDriver {
}
if (anyApiChanged) {
_logger.writeln('API signatures mismatch found for $path');
- _dependencySignatureMap.clear();
+ // TODO(scheglov) schedule analysis of only affected files
_filesToAnalyze.addAll(_explicitFiles);
}
return files[0];
@@ -1139,26 +1137,10 @@ class _LibraryNode {
final FileState file;
final Uri uri;
- String _dependencySignature;
-
_LibraryNode(this.driver, this.file, this.uri);
String get dependencySignature {
- return _dependencySignature ??=
- driver._dependencySignatureMap.putIfAbsent(uri, () {
- ApiSignature signature = new ApiSignature();
- signature.addUint32List(driver._salt);
- signature.addString(driver._sdkBundle.apiSignature);
-
- // Add all unlinked API signatures.
- file.transitiveFiles
- .map((file) => file.apiSignature)
- .forEach(signature.addBytes);
-
- // Combine into a single hash.
- signature.addString(uri.toString());
- return signature.toHex();
- });
+ return file.transitiveSignature;
}
@override
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/dart/analysis/file_state.dart » ('j') | pkg/analyzer/lib/src/dart/analysis/file_state.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698