Index: pkg/analyzer/lib/src/generated/engine.dart |
diff --git a/pkg/analyzer/lib/src/generated/engine.dart b/pkg/analyzer/lib/src/generated/engine.dart |
index b8cf515cef685a79bd00a15f997bd6dbbb30e7eb..f82681ca9f57702ea46d288054692b8b91f41a95 100644 |
--- a/pkg/analyzer/lib/src/generated/engine.dart |
+++ b/pkg/analyzer/lib/src/generated/engine.dart |
@@ -1212,6 +1212,27 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
} |
@override |
+ bool validateSourceCacheConsistency(Source source) { |
+ SourceEntry entry = _cache.get(source); |
+ if (entry != null) { |
+ int sourceTime = getModificationStamp(source); |
+ if (sourceTime != entry.modificationTime) { |
+ _sourceChanged(source); |
+ return true; |
+ } |
+ if (entry.exception != null) { |
+ if (!exists(source)) { |
+ if (getLibrariesContaining(source).isEmpty && |
+ getLibrariesDependingOn(source).isEmpty) { |
+ _cache.remove(source); |
+ } |
+ } |
+ } |
+ } |
+ return false; |
+ } |
+ |
+ @override |
List<Source> get launchableServerLibrarySources { |
// TODO(brianwilkerson) This needs to filter out libraries that reference |
// dart:html, either directly or indirectly. |
@@ -2269,9 +2290,6 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
AnalysisTask task = PerformanceStatistics.nextTask |
.makeCurrentWhile(() => nextAnalysisTask); |
int getEnd = JavaSystem.currentTimeMillis(); |
- if (task == null && _validateCacheConsistency()) { |
- task = nextAnalysisTask; |
- } |
if (task == null) { |
_validateLastIncrementalResolutionResult(); |
if (_performAnalysisTaskStopwatch != null) { |
@@ -4026,13 +4044,6 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
false; |
/** |
- * Log the given debugging [message]. |
- */ |
- void _logInformation(String message) { |
- AnalysisEngine.instance.logger.logInformation(message); |
- } |
- |
- /** |
* Notify all of the analysis listeners that a task is about to be performed. |
*/ |
void _notifyAboutToPerformTask(String taskDescription) { |
@@ -4731,65 +4742,6 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
}); |
} |
- /** |
- * Check the cache for any invalid entries (entries whose modification time |
- * does not match the modification time of the source associated with the |
- * entry). Invalid entries will be marked as invalid so that the source will |
- * be re-analyzed. Return `true` if at least one entry was invalid. |
- */ |
- bool _validateCacheConsistency() { |
- int consistencyCheckStart = JavaSystem.nanoTime(); |
- List<Source> changedSources = new List<Source>(); |
- List<Source> missingSources = new List<Source>(); |
- MapIterator<Source, SourceEntry> iterator = _cache.iterator(); |
- while (iterator.moveNext()) { |
- Source source = iterator.key; |
- SourceEntry sourceEntry = iterator.value; |
- int sourceTime = getModificationStamp(source); |
- if (sourceTime != sourceEntry.modificationTime) { |
- changedSources.add(source); |
- } |
- if (sourceEntry.exception != null) { |
- if (!exists(source)) { |
- missingSources.add(source); |
- } |
- } |
- } |
- int count = changedSources.length; |
- for (int i = 0; i < count; i++) { |
- _sourceChanged(changedSources[i]); |
- } |
- int removalCount = 0; |
- for (Source source in missingSources) { |
- if (getLibrariesContaining(source).isEmpty && |
- getLibrariesDependingOn(source).isEmpty) { |
- _cache.remove(source); |
- removalCount++; |
- } |
- } |
- int consistencyCheckEnd = JavaSystem.nanoTime(); |
- if (changedSources.length > 0 || missingSources.length > 0) { |
- StringBuffer buffer = new StringBuffer(); |
- buffer.write("Consistency check took "); |
- buffer.write((consistencyCheckEnd - consistencyCheckStart) / 1000000.0); |
- buffer.writeln(" ms and found"); |
- buffer.write(" "); |
- buffer.write(changedSources.length); |
- buffer.writeln(" inconsistent entries"); |
- buffer.write(" "); |
- buffer.write(missingSources.length); |
- buffer.write(" missing sources ("); |
- buffer.write(removalCount); |
- buffer.writeln(" removed"); |
- for (Source source in missingSources) { |
- buffer.write(" "); |
- buffer.writeln(source.fullName); |
- } |
- _logInformation(buffer.toString()); |
- } |
- return changedSources.length > 0; |
- } |
- |
void _validateLastIncrementalResolutionResult() { |
if (incrementalResolutionValidation_lastUnitSource == null || |
incrementalResolutionValidation_lastLibrarySource == null || |
@@ -9192,6 +9144,14 @@ abstract class InternalAnalysisContext implements AnalysisContext { |
void set typeProvider(TypeProvider typeProvider); |
/** |
+ * Check whether the cache entry for the given [source] is valid, i.e. the |
+ * entry modification time matches the modification time of the [source]. |
+ * If not, the entry is marked as invalid so that the source will be |
+ * re-analyzed, and `true` is returned. |
+ */ |
+ bool validateSourceCacheConsistency(Source source); |
+ |
+ /** |
* A factory to override how [TypeResolverVisitor] is created. |
*/ |
TypeResolverVisitorFactory get typeResolverVisitorFactory; |