Index: pkg/analysis_server/lib/src/operation/operation_analysis.dart |
diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart |
index f18ad32139ce226dada6fb92319c8ffa74e2f190..e7ba700b93b8f56cdf9428eb9a6fd90191b10ee0 100644 |
--- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart |
+++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart |
@@ -77,8 +77,8 @@ void scheduleNotificationOperations( |
} |
if (server.hasAnalysisSubscription( |
protocol.AnalysisService.NAVIGATION, file)) { |
- server.scheduleOperation( |
- new _DartNavigationOperation(context, file, resolvedDartUnit)); |
+ Source source = resolvedDartUnit.element.source; |
+ server.scheduleOperation(new NavigationOperation(context, source)); |
} |
if (server.hasAnalysisSubscription( |
protocol.AnalysisService.OCCURRENCES, file)) { |
@@ -229,6 +229,16 @@ void _sendNotification(AnalysisServer server, f()) { |
}); |
} |
+class NavigationOperation extends _NotificationOperation { |
+ NavigationOperation(AnalysisContext context, Source source) |
+ : super(context, source); |
+ |
+ @override |
+ void perform(AnalysisServer server) { |
+ sendAnalysisNotificationNavigation(server, context, source); |
+ } |
+} |
+ |
/** |
* Instances of [PerformAnalysisOperation] perform a single analysis task. |
*/ |
@@ -380,18 +390,6 @@ class _DartIndexOperation extends _SingleFileOperation { |
} |
} |
-class _DartNavigationOperation extends _DartNotificationOperation { |
- _DartNavigationOperation( |
- AnalysisContext context, String file, CompilationUnit unit) |
- : super(context, file, unit); |
- |
- @override |
- void perform(AnalysisServer server) { |
- Source source = unit.element.source; |
- sendAnalysisNotificationNavigation(server, context, source); |
- } |
-} |
- |
abstract class _DartNotificationOperation extends _SingleFileOperation { |
final CompilationUnit unit; |
@@ -476,6 +474,22 @@ class _NotificationErrorsOperation extends _SingleFileOperation { |
} |
} |
+abstract class _NotificationOperation extends SourceSensitiveOperation { |
+ final Source source; |
+ |
+ _NotificationOperation(AnalysisContext context, this.source) : super(context); |
+ |
+ @override |
+ ServerOperationPriority get priority { |
+ return ServerOperationPriority.ANALYSIS_NOTIFICATION; |
+ } |
+ |
+ @override |
+ bool shouldBeDiscardedOnSourceChange(Source source) { |
+ return source == this.source; |
+ } |
+} |
+ |
abstract class _SingleFileOperation extends SourceSensitiveOperation { |
final String file; |