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 599d0c9eb6a32c699ea47260e007e973e858e608..69040333d01abc4676dcaa56bd2e359b3c2bd133 100644 |
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart |
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart |
@@ -259,6 +259,7 @@ class AnalysisDriver { |
bool analyzed = false; |
for (String path in _priorityFiles) { |
if (_filesToAnalyze.remove(path)) { |
+ analyzed = true; |
AnalysisResult result = |
_computeAnalysisResult(path, withUnit: true); |
yield result; |
@@ -331,7 +332,9 @@ class AnalysisDriver { |
*/ |
void changeFile(String path) { |
_changedFiles.add(path); |
- _filesToAnalyze.add(path); |
+ if (_explicitFiles.contains(path)) { |
+ _filesToAnalyze.add(path); |
+ } |
_transitionToAnalyzing(); |
_hasWork.notify(); |
} |
@@ -472,6 +475,7 @@ class AnalysisDriver { |
AnalysisContext _createAnalysisContext(_LibraryContext libraryContext) { |
AnalysisContextImpl analysisContext = |
AnalysisEngine.instance.createAnalysisContext(); |
+ analysisContext.analysisOptions = _analysisOptions; |
analysisContext.sourceFactory = |
new SourceFactory((_sourceFactory as SourceFactoryImpl).resolvers); |
@@ -941,7 +945,7 @@ class _File { |
List<int> bytes = driver._byteStore.get(key); |
if (bytes != null) { |
PackageBundle unlinked = new PackageBundle.fromBuffer(bytes); |
- driver._fileApiSignatureMap[path] = unlinked.apiSignature; |
+ _updateApiSignature(driver, path, unlinked.apiSignature); |
return new _File._(driver, source, null, contentHash, unlinked, null); |
} |
} |
@@ -972,7 +976,7 @@ class _File { |
}); |
} |
unlinked = new PackageBundle.fromBuffer(bytes); |
- driver._fileApiSignatureMap[path] = unlinked.apiSignature; |
+ _updateApiSignature(driver, path, unlinked.apiSignature); |
} |
// Return the full file. |
return new _File._(driver, source, content, contentHash, unlinked, unit); |
@@ -1021,6 +1025,15 @@ class _File { |
unit.lineInfo = lineInfo; |
return unit; |
} |
+ |
+ static void _updateApiSignature( |
+ AnalysisDriver driver, String path, String newSignature) { |
+ String oldSignature = driver._fileApiSignatureMap[path]; |
+ if (oldSignature != null && oldSignature != newSignature) { |
+ driver._dependencySignatureMap.clear(); |
+ } |
+ driver._fileApiSignatureMap[path] = newSignature; |
+ } |
} |
/** |