| 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 3d2bab7dc496d347567a09c169792e47f2604f93..6abe0439ddd9c6b2ca57cd503b31e38e5a1141a6 100644
|
| --- a/pkg/analysis_server/lib/src/analysis_server.dart
|
| +++ b/pkg/analysis_server/lib/src/analysis_server.dart
|
| @@ -39,6 +39,7 @@ import 'package:analyzer/src/generated/source_io.dart';
|
| import 'package:analyzer/src/generated/utilities_general.dart';
|
| import 'package:analyzer/src/task/dart.dart';
|
| import 'package:analyzer/src/util/glob.dart';
|
| +import 'package:analyzer/task/dart.dart';
|
| import 'package:plugin/plugin.dart';
|
|
|
| typedef void OptionUpdater(AnalysisOptionsImpl options);
|
| @@ -83,7 +84,7 @@ class AnalysisServer {
|
| * a 1 millisecond delay so that the VM and dart:io can deliver content
|
| * to stdin. This should be removed once the underlying problem is fixed.
|
| */
|
| - static int performOperationDelayFreqency = 25;
|
| + static int performOperationDelayFrequency = 25;
|
|
|
| /**
|
| * The options of this server instance.
|
| @@ -354,6 +355,7 @@ class AnalysisServer {
|
| _performance = performanceAfterStartup;
|
| });
|
| });
|
| + _setupIndexInvalidation();
|
| Notification notification =
|
| new ServerConnectedParams(VERSION).toNotification();
|
| channel.sendNotification(notification);
|
| @@ -675,23 +677,6 @@ class AnalysisServer {
|
| return context.getErrors(source);
|
| }
|
|
|
| -// TODO(brianwilkerson) Add the following method after 'prioritySources' has
|
| -// been added to InternalAnalysisContext.
|
| -// /**
|
| -// * Return a list containing the full names of all of the sources that are
|
| -// * priority sources.
|
| -// */
|
| -// List<String> getPriorityFiles() {
|
| -// List<String> priorityFiles = new List<String>();
|
| -// folderMap.values.forEach((ContextDirectory directory) {
|
| -// InternalAnalysisContext context = directory.context;
|
| -// context.prioritySources.forEach((Source source) {
|
| -// priorityFiles.add(source.fullName);
|
| -// });
|
| -// });
|
| -// return priorityFiles;
|
| -// }
|
| -
|
| /**
|
| * Returns resolved [AstNode]s at the given [offset] of the given [file].
|
| *
|
| @@ -709,6 +694,23 @@ class AnalysisServer {
|
| return nodes;
|
| }
|
|
|
| +// TODO(brianwilkerson) Add the following method after 'prioritySources' has
|
| +// been added to InternalAnalysisContext.
|
| +// /**
|
| +// * Return a list containing the full names of all of the sources that are
|
| +// * priority sources.
|
| +// */
|
| +// List<String> getPriorityFiles() {
|
| +// List<String> priorityFiles = new List<String>();
|
| +// folderMap.values.forEach((ContextDirectory directory) {
|
| +// InternalAnalysisContext context = directory.context;
|
| +// context.prioritySources.forEach((Source source) {
|
| +// priorityFiles.add(source.fullName);
|
| +// });
|
| +// });
|
| +// return priorityFiles;
|
| +// }
|
| +
|
| /**
|
| * Returns resolved [CompilationUnit]s of the Dart file with the given [path].
|
| *
|
| @@ -1452,14 +1454,42 @@ class AnalysisServer {
|
| */
|
| int now = new DateTime.now().millisecondsSinceEpoch;
|
| if (now > _nextPerformOperationDelayTime &&
|
| - performOperationDelayFreqency > 0) {
|
| - _nextPerformOperationDelayTime = now + performOperationDelayFreqency;
|
| + performOperationDelayFrequency > 0) {
|
| + _nextPerformOperationDelayTime = now + performOperationDelayFrequency;
|
| new Future.delayed(new Duration(milliseconds: 1), performOperation);
|
| } else {
|
| new Future(performOperation);
|
| }
|
| performOperationPending = true;
|
| }
|
| +
|
| + /**
|
| + * Listen for context events and invalidate index.
|
| + *
|
| + * It is possible that this method will do more in the future, e.g. listening
|
| + * for summary information and linking pre-indexed packages into the index,
|
| + * but for now we only invalidate project specific index information.
|
| + */
|
| + void _setupIndexInvalidation() {
|
| + if (index2 == null) {
|
| + return;
|
| + }
|
| + onContextsChanged.listen((ContextsChangedEvent event) {
|
| + for (AnalysisContext context in event.added) {
|
| + context
|
| + .onResultChanged(RESOLVED_UNIT)
|
| + .listen((ResultChangedEvent event) {
|
| + if (event.wasInvalidated) {
|
| + LibrarySpecificUnit target = event.target;
|
| + index2.removeUnit(event.context, target.library, target.unit);
|
| + }
|
| + });
|
| + }
|
| + for (AnalysisContext context in event.removed) {
|
| + index2.removeContext(context);
|
| + }
|
| + });
|
| + }
|
| }
|
|
|
| class AnalysisServerOptions {
|
| @@ -1662,7 +1692,7 @@ class ServerPerformance {
|
| int slowRequestCount = 0;
|
|
|
| /**
|
| - * Log performation information about the given request.
|
| + * Log performance information about the given request.
|
| */
|
| void logRequest(Request request) {
|
| ++requestCount;
|
|
|