Index: pkg/analyzer/lib/src/context/context.dart |
diff --git a/pkg/analyzer/lib/src/context/context.dart b/pkg/analyzer/lib/src/context/context.dart |
index def719f33a6b86f433cc2600274ea11f8b930b00..e34d1aa863c16e3ecb567d5e0bbb0cd00179e44a 100644 |
--- a/pkg/analyzer/lib/src/context/context.dart |
+++ b/pkg/analyzer/lib/src/context/context.dart |
@@ -194,6 +194,13 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
ResultProvider resultProvider; |
/** |
+ * The map of [InvalidatedResult] controllers. |
+ */ |
+ final Map<ResultDescriptor, StreamController<InvalidatedResult>> |
+ _resultInvalidatedControllers = |
+ <ResultDescriptor, StreamController<InvalidatedResult>>{}; |
+ |
+ /** |
* The most recently incrementally resolved source, or `null` when it was |
* already validated, or the most recent change was not incrementally resolved. |
*/ |
@@ -682,10 +689,14 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
if (sdk == null) { |
return new AnalysisCache(<CachePartition>[_privatePartition]); |
} |
- return new AnalysisCache(<CachePartition>[ |
+ AnalysisCache cache = new AnalysisCache(<CachePartition>[ |
AnalysisEngine.instance.partitionManager.forSdk(sdk), |
_privatePartition |
]); |
+ cache.onResultInvalidated.listen((InvalidatedResult event) { |
+ _resultInvalidatedControllers[event.descriptor]?.add(event); |
+ }); |
+ return cache; |
} |
/** |
@@ -1104,6 +1115,13 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
} |
@override |
+ Stream<InvalidatedResult> onResultInvalidated(ResultDescriptor descriptor) { |
+ return _resultInvalidatedControllers.putIfAbsent(descriptor, () { |
+ return new StreamController<InvalidatedResult>.broadcast(sync: true); |
+ }).stream; |
+ } |
+ |
+ @override |
CompilationUnit parseCompilationUnit(Source source) { |
if (!AnalysisEngine.isDartFileName(source.shortName)) { |
return null; |