| Index: pkg/analysis_server/lib/src/context_manager.dart | 
| diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart | 
| index 0226b7c561a0676dadc9e034f8901ee0318299c7..40bd651ec7e85a61c713786a2ef1f3b980c02d6f 100644 | 
| --- a/pkg/analysis_server/lib/src/context_manager.dart | 
| +++ b/pkg/analysis_server/lib/src/context_manager.dart | 
| @@ -250,13 +250,6 @@ abstract class ContextManager { | 
| List<String> get includedPaths; | 
|  | 
| /** | 
| -   * The stream that is notified when we are starting or ending the computation | 
| -   * of a package map. A value of `true` is added when the computation starts | 
| -   * and a value of `false` is added when the computation ends. | 
| -   */ | 
| -  Stream<bool> get onComputingPackageMap; | 
| - | 
| -  /** | 
| * Return a list of all of the contexts reachable from the given | 
| * [analysisRoot] (the context associated with [analysisRoot] and all of its | 
| * descendants). | 
| @@ -329,6 +322,12 @@ abstract class ContextManagerCallbacks { | 
| void applyChangesToContext(Folder contextFolder, ChangeSet changeSet); | 
|  | 
| /** | 
| +   * Signals that the context manager has started to compute a package map (if | 
| +   * [computing] is `true`) or has finished (if [computing] is `false`). | 
| +   */ | 
| +  void computingPackageMap(bool computing); | 
| + | 
| +  /** | 
| * Remove the context associated with the given [folder].  [flushedFiles] is | 
| * a list of the files which will be "orphaned" by removing this context | 
| * (they will no longer be analyzed by any context). | 
| @@ -461,12 +460,6 @@ class ContextManagerImpl implements ContextManager { | 
| final ContextInfo rootInfo = new ContextInfo._root(); | 
|  | 
| /** | 
| -   * The controller that is notified when we are starting or ending the | 
| -   * computation of a package map. | 
| -   */ | 
| -  StreamController<bool> _onComputingPackageMapController; | 
| - | 
| -  /** | 
| * Stream subscription we are using to watch each analysis root directory for | 
| * changes. | 
| */ | 
| @@ -482,12 +475,6 @@ class ContextManagerImpl implements ContextManager { | 
| this.defaultContextOptions) { | 
| absolutePathContext = resourceProvider.absolutePathContext; | 
| pathContext = resourceProvider.pathContext; | 
| -    _onComputingPackageMapController = new StreamController.broadcast(); | 
| -  } | 
| - | 
| -  @override | 
| -  Stream<bool> get onComputingPackageMap { | 
| -    return _onComputingPackageMapController.stream; | 
| } | 
|  | 
| @override | 
| @@ -998,7 +985,7 @@ class ContextManagerImpl implements ContextManager { | 
| return new NoPackageFolderDisposition(packageRoot: packageRoot); | 
| } else { | 
| PackageMapInfo packageMapInfo; | 
| -      _onComputingPackageMapController.add(true); | 
| +      callbacks.computingPackageMap(true); | 
| try { | 
| // Try .packages first. | 
| if (absolutePathContext.basename(packagespecFile.path) == | 
| @@ -1017,7 +1004,7 @@ class ContextManagerImpl implements ContextManager { | 
| packageMapInfo = _packageMapProvider.computePackageMap(folder); | 
| }); | 
| } finally { | 
| -        _onComputingPackageMapController.add(false); | 
| +        callbacks.computingPackageMap(false); | 
| } | 
| for (String dependencyPath in packageMapInfo.dependencies) { | 
| addDependency(dependencyPath); | 
|  |