Index: pkg/analyzer/lib/src/context/cache.dart |
diff --git a/pkg/analyzer/lib/src/context/cache.dart b/pkg/analyzer/lib/src/context/cache.dart |
index 6669d04f1df6adc7636679a7be9b66d00a6f0d52..104d89a55cc4a91b627b141cf6e63e45cb7084c0 100644 |
--- a/pkg/analyzer/lib/src/context/cache.dart |
+++ b/pkg/analyzer/lib/src/context/cache.dart |
@@ -27,6 +27,11 @@ typedef bool FlushResultFilter<V>( |
AnalysisTarget target, ResultDescriptor<V> result); |
/** |
+ * Return `true` if some results of the [target] should be flushed. |
+ */ |
+typedef bool FlushTargetFilter<V>(AnalysisTarget target); |
+ |
+/** |
* Return `true` if the given [target] is a priority one. |
*/ |
typedef bool IsPriorityAnalysisTarget(AnalysisTarget target); |
@@ -113,11 +118,11 @@ class AnalysisCache { |
} |
/** |
- * Flush results that satisfy the given [filter]. |
+ * Flush results that satisfy the given [targetFilter] and [resultFilter]. |
*/ |
- void flush(FlushResultFilter filter) { |
+ void flush(FlushTargetFilter targetFilter, FlushResultFilter resultFilter) { |
for (CachePartition partition in _partitions) { |
- partition.flush(filter); |
+ partition.flush(targetFilter, resultFilter); |
} |
} |
@@ -405,16 +410,18 @@ class CacheEntry { |
} |
/** |
- * Flush results that satisfy the given [filter]. |
+ * Flush results that satisfy the given [targetFilter] and [resultFilter]. |
*/ |
- void flush(FlushResultFilter filter) { |
- _resultMap.forEach((ResultDescriptor result, ResultData data) { |
- if (data.state == CacheState.VALID) { |
- if (filter(target, result)) { |
- data.flush(); |
+ void flush(FlushTargetFilter targetFilter, FlushResultFilter resultFilter) { |
+ if (targetFilter(target)) { |
+ _resultMap.forEach((ResultDescriptor result, ResultData data) { |
+ if (data.state == CacheState.VALID) { |
+ if (resultFilter(target, result)) { |
+ data.flush(); |
+ } |
} |
- } |
- }); |
+ }); |
+ } |
} |
/** |
@@ -1092,11 +1099,11 @@ abstract class CachePartition { |
} |
/** |
- * Flush results that satisfy the given [filter]. |
+ * Flush results that satisfy the given [targetFilter] and [resultFilter]. |
*/ |
- void flush(FlushResultFilter filter) { |
+ void flush(FlushTargetFilter targetFilter, FlushResultFilter resultFilter) { |
for (CacheEntry entry in entryMap.values) { |
- entry.flush(filter); |
+ entry.flush(targetFilter, resultFilter); |
} |
} |