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..c5b356d59572f9190f6a05b22907c11331587413 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 [InvalidatedResultEvent] controllers. |
+ */ |
+ final Map<ResultDescriptor, StreamController<InvalidatedResultEvent>> |
+ _resultInvalidatedControllers = |
+ <ResultDescriptor, StreamController<InvalidatedResultEvent>>{}; |
+ |
+ /** |
* 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,19 @@ 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) { |
+ StreamController<InvalidatedResultEvent> controller = |
+ _resultInvalidatedControllers[event.descriptor]; |
+ if (controller != null) { |
+ controller.add(new InvalidatedResultEvent( |
+ this, event.entry.target, event.descriptor, event.value)); |
+ } |
+ }); |
+ return cache; |
} |
/** |
@@ -1104,6 +1120,14 @@ class AnalysisContextImpl implements InternalAnalysisContext { |
} |
@override |
+ Stream<InvalidatedResultEvent> onResultInvalidated( |
+ ResultDescriptor descriptor) { |
+ return _resultInvalidatedControllers.putIfAbsent(descriptor, () { |
+ return new StreamController<InvalidatedResultEvent>.broadcast(sync: true); |
+ }).stream; |
+ } |
+ |
+ @override |
CompilationUnit parseCompilationUnit(Source source) { |
if (!AnalysisEngine.isDartFileName(source.shortName)) { |
return null; |