| 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 64164b21c9bd9b3f41a2513d8c71615ce1fb4b40..78b8bcb87fe14141916e191d9a0a411ce36badd7 100644
|
| --- a/pkg/analysis_server/lib/src/analysis_server.dart
|
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart
|
| @@ -28,6 +28,8 @@ import 'package:analysis_server/src/operation/operation.dart';
|
| import 'package:analysis_server/src/operation/operation_analysis.dart';
|
| import 'package:analysis_server/src/operation/operation_queue.dart';
|
| import 'package:analysis_server/src/plugin/notification_manager.dart';
|
| +import 'package:analysis_server/src/plugin/plugin_manager.dart';
|
| +import 'package:analysis_server/src/plugin/plugin_watcher.dart';
|
| import 'package:analysis_server/src/plugin/server_plugin.dart';
|
| import 'package:analysis_server/src/protocol_server.dart' as server;
|
| import 'package:analysis_server/src/server/diagnostic_server.dart';
|
| @@ -38,6 +40,7 @@ import 'package:analysis_server/src/services/search/search_engine_internal.dart'
|
| import 'package:analysis_server/src/services/search/search_engine_internal2.dart';
|
| import 'package:analysis_server/src/single_context_manager.dart';
|
| import 'package:analysis_server/src/utilities/null_string_sink.dart';
|
| +import 'package:analyzer/context/context_root.dart';
|
| import 'package:analyzer/dart/ast/ast.dart';
|
| import 'package:analyzer/dart/ast/standard_resolution_map.dart';
|
| import 'package:analyzer/dart/element/element.dart';
|
| @@ -135,6 +138,11 @@ class AnalysisServer {
|
| final NotificationManager notificationManager;
|
|
|
| /**
|
| + * The object used to manage the execution of plugins.
|
| + */
|
| + PluginManager pluginManager;
|
| +
|
| + /**
|
| * The [ResourceProvider] using which paths are converted into [Resource]s.
|
| */
|
| final ResourceProvider resourceProvider;
|
| @@ -391,6 +399,12 @@ class AnalysisServer {
|
| : notificationManager =
|
| new NotificationManager(channel, resourceProvider) {
|
| _performance = performanceDuringStartup;
|
| +
|
| + pluginManager = new PluginManager(resourceProvider, _getByteStorePath(),
|
| + notificationManager, instrumentationService);
|
| + PluginWatcher pluginWatcher =
|
| + new PluginWatcher(resourceProvider, pluginManager);
|
| +
|
| defaultContextOptions.incremental = true;
|
| defaultContextOptions.incrementalApi =
|
| options.enableIncrementalResolutionApi;
|
| @@ -415,8 +429,9 @@ class AnalysisServer {
|
| _analysisPerformanceLogger = new nd.PerformanceLog(sink);
|
| }
|
| byteStore = _createByteStore();
|
| - analysisDriverScheduler =
|
| - new nd.AnalysisDriverScheduler(_analysisPerformanceLogger);
|
| + analysisDriverScheduler = new nd.AnalysisDriverScheduler(
|
| + _analysisPerformanceLogger,
|
| + driverWatcher: pluginWatcher);
|
| analysisDriverScheduler.status.listen(sendStatusNotificationNew);
|
| analysisDriverScheduler.start();
|
|
|
| @@ -1734,6 +1749,21 @@ class AnalysisServer {
|
| }
|
|
|
| /**
|
| + * Return the path to the location of the byte store on disk, or `null` if
|
| + * there is no on-disk byte store.
|
| + */
|
| + String _getByteStorePath() {
|
| + if (resourceProvider is PhysicalResourceProvider) {
|
| + Folder stateLocation =
|
| + resourceProvider.getStateLocation('.analysis-driver');
|
| + if (stateLocation != null) {
|
| + return stateLocation.path;
|
| + }
|
| + }
|
| + return null;
|
| + }
|
| +
|
| + /**
|
| * Return a set of all contexts whose associated folder is contained within,
|
| * or equal to, one of the resources in the given list of [resources].
|
| */
|
| @@ -1902,9 +1932,10 @@ class ServerContextManagerCallbacks extends ContextManagerCallbacks {
|
| ServerContextManagerCallbacks(this.analysisServer, this.resourceProvider);
|
|
|
| @override
|
| - nd.AnalysisDriver addAnalysisDriver(Folder folder, AnalysisOptions options) {
|
| + nd.AnalysisDriver addAnalysisDriver(
|
| + Folder folder, ContextRoot contextRoot, AnalysisOptions options) {
|
| ContextBuilder builder = createContextBuilder(folder, options);
|
| - nd.AnalysisDriver analysisDriver = builder.buildDriver(folder.path);
|
| + nd.AnalysisDriver analysisDriver = builder.buildDriver(contextRoot);
|
| analysisDriver.results.listen((result) {
|
| NotificationManager notificationManager =
|
| analysisServer.notificationManager;
|
|
|