Index: pkg/analysis_server/lib/src/analysis_server.dart |
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart |
index 57fd20387892bbcc19981930cef05cdf2a58d7f9..f7f2ede469538fe516e7722300f9e3dffd82ba47 100644 |
--- a/pkg/analysis_server/lib/src/analysis_server.dart |
+++ b/pkg/analysis_server/lib/src/analysis_server.dart |
@@ -117,7 +117,7 @@ class AnalysisServer { |
* The [ContextManager] that handles the mapping from analysis roots to |
* context directories. |
*/ |
- ServerContextManager contextManager; |
+ ContextManager contextManager; |
/** |
* A flag indicating whether the server is running. When false, contexts |
@@ -294,20 +294,19 @@ class AnalysisServer { |
_performance = performanceDuringStartup; |
operationQueue = new ServerOperationQueue(); |
if (contextManager == null) { |
- contextManager = new ServerContextManager(this, resourceProvider, |
+ contextManager = new ContextManagerImpl(resourceProvider, |
packageResolverProvider, packageMapProvider, instrumentationService); |
- AnalysisOptionsImpl analysisOptions = |
- (contextManager as ServerContextManager).defaultOptions; |
- analysisOptions.incremental = true; |
- analysisOptions.incrementalApi = options.enableIncrementalResolutionApi; |
- analysisOptions.incrementalValidation = |
- options.enableIncrementalResolutionValidation; |
- analysisOptions.generateImplicitErrors = false; |
- } else if (contextManager is! ServerContextManager) { |
- // TODO(brianwilkerson) Remove this when the interface is complete. |
- throw new StateError( |
- 'The contextManager must be an instance of ServerContextManager'); |
} |
+ ServerContextManagerCallbacks contextManagerCallbacks = |
+ new ServerContextManagerCallbacks(this, resourceProvider); |
+ contextManager.callbacks = contextManagerCallbacks; |
+ AnalysisOptionsImpl analysisOptions = |
+ contextManagerCallbacks.defaultOptions; |
+ analysisOptions.incremental = true; |
+ analysisOptions.incrementalApi = options.enableIncrementalResolutionApi; |
+ analysisOptions.incrementalValidation = |
+ options.enableIncrementalResolutionValidation; |
+ analysisOptions.generateImplicitErrors = false; |
this.contextManager = contextManager; |
_noErrorNotification = options.noErrorNotification; |
AnalysisEngine.instance.logger = new AnalysisLogger(); |
@@ -353,7 +352,7 @@ class AnalysisServer { |
* The stream that is notified when contexts are added or removed. |
*/ |
Stream<ContextsChangedEvent> get onContextsChanged => |
- contextManager.onContextsChanged; |
+ (contextManager.callbacks as ServerContextManagerCallbacks).onContextsChanged; |
Brian Wilkerson
2015/07/21 13:56:44
Do we plan on eventually removing the need for thi
Paul Berry
2015/07/21 17:22:21
Yes. My plan (probably in the next CL) is to remo
|
/** |
* The stream that is notified when a single file has been analyzed. |
@@ -497,15 +496,14 @@ class AnalysisServer { |
{ |
AnalysisContext containingContext = getContainingContext(path); |
if (containingContext != null) { |
- Source source = AbstractContextManager.createSourceInContext( |
- containingContext, file); |
+ Source source = |
+ ContextManagerImpl.createSourceInContext(containingContext, file); |
return new ContextSourcePair(containingContext, source); |
} |
} |
// try to find a context that analysed the file |
for (AnalysisContext context in folderMap.values) { |
- Source source = |
- AbstractContextManager.createSourceInContext(context, file); |
+ Source source = ContextManagerImpl.createSourceInContext(context, file); |
SourceKind kind = context.getKindOf(source); |
if (kind != SourceKind.UNKNOWN) { |
return new ContextSourcePair(context, source); |
@@ -1025,8 +1023,8 @@ class AnalysisServer { |
Uri uri = context.sourceFactory.restoreUri(source); |
if (uri.scheme != 'file') { |
preferredContext = context; |
- source = AbstractContextManager.createSourceInContext( |
- context, resource); |
+ source = |
+ ContextManagerImpl.createSourceInContext(context, resource); |
break; |
} |
} |
@@ -1226,7 +1224,8 @@ class AnalysisServer { |
// |
// Update the defaults used to create new contexts. |
// |
- AnalysisOptionsImpl options = contextManager.defaultOptions; |
+ AnalysisOptionsImpl options = |
+ (contextManager.callbacks as ServerContextManagerCallbacks).defaultOptions; |
optionUpdaters.forEach((OptionUpdater optionUpdater) { |
optionUpdater(options); |
}); |
@@ -1337,7 +1336,7 @@ class PriorityChangeEvent { |
PriorityChangeEvent(this.firstSource); |
} |
-class ServerContextManager extends AbstractContextManager { |
+class ServerContextManagerCallbacks extends ContextManagerCallbacks { |
final AnalysisServer analysisServer; |
/** |
@@ -1350,12 +1349,12 @@ class ServerContextManager extends AbstractContextManager { |
*/ |
StreamController<ContextsChangedEvent> _onContextsChangedController; |
- ServerContextManager(this.analysisServer, ResourceProvider resourceProvider, |
- ResolverProvider packageResolverProvider, |
- OptimizingPubPackageMapProvider packageMapProvider, |
- InstrumentationService service) |
- : super(resourceProvider, packageResolverProvider, packageMapProvider, |
- service) { |
+ /** |
+ * The [ResourceProvider] by which paths are converted into [Resource]s. |
+ */ |
+ final ResourceProvider resourceProvider; |
+ |
+ ServerContextManagerCallbacks(this.analysisServer, this.resourceProvider) { |
_onContextsChangedController = |
new StreamController<ContextsChangedEvent>.broadcast(); |
} |
@@ -1406,13 +1405,8 @@ class ServerContextManager extends AbstractContextManager { |
} |
@override |
- void removeContext(Folder folder) { |
+ void removeContext(Folder folder, List<String> flushedFiles) { |
AnalysisContext context = analysisServer.folderMap.remove(folder); |
- |
- // See dartbug.com/22689, the AnalysisContext is computed in |
- // computeFlushedFiles instead of using the referenced context above, this |
- // is an attempt to be careful concerning the referenced issue. |
- List<String> flushedFiles = computeFlushedFiles(folder); |
sendAnalysisNotificationFlushResults(analysisServer, flushedFiles); |
if (analysisServer.index != null) { |