| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library operation.analysis; | 5 library operation.analysis; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/analysis_server.dart'; | 7 import 'package:analysis_server/src/analysis_server.dart'; |
| 8 import 'package:analysis_server/src/computer/computer_highlights.dart'; | 8 import 'package:analysis_server/src/computer/computer_highlights.dart'; |
| 9 import 'package:analysis_server/src/computer/computer_highlights2.dart'; | 9 import 'package:analysis_server/src/computer/computer_highlights2.dart'; |
| 10 import 'package:analysis_server/src/computer/computer_occurrences.dart'; | |
| 11 import 'package:analysis_server/src/computer/computer_outline.dart'; | 10 import 'package:analysis_server/src/computer/computer_outline.dart'; |
| 12 import 'package:analysis_server/src/computer/computer_overrides.dart'; | 11 import 'package:analysis_server/src/computer/computer_overrides.dart'; |
| 13 import 'package:analysis_server/src/domains/analysis/navigation.dart'; | 12 import 'package:analysis_server/src/domains/analysis/navigation.dart'; |
| 13 import 'package:analysis_server/src/domains/analysis/occurrences.dart'; |
| 14 import 'package:analysis_server/src/operation/operation.dart'; | 14 import 'package:analysis_server/src/operation/operation.dart'; |
| 15 import 'package:analysis_server/src/protocol_server.dart' as protocol; | 15 import 'package:analysis_server/src/protocol_server.dart' as protocol; |
| 16 import 'package:analysis_server/src/services/dependencies/library_dependencies.d
art'; | 16 import 'package:analysis_server/src/services/dependencies/library_dependencies.d
art'; |
| 17 import 'package:analysis_server/src/services/index/index.dart'; | 17 import 'package:analysis_server/src/services/index/index.dart'; |
| 18 import 'package:analyzer/src/generated/ast.dart'; | 18 import 'package:analyzer/src/generated/ast.dart'; |
| 19 import 'package:analyzer/src/generated/engine.dart'; | 19 import 'package:analyzer/src/generated/engine.dart'; |
| 20 import 'package:analyzer/src/generated/error.dart'; | 20 import 'package:analyzer/src/generated/error.dart'; |
| 21 import 'package:analyzer/src/generated/html.dart'; | 21 import 'package:analyzer/src/generated/html.dart'; |
| 22 import 'package:analyzer/src/generated/source.dart'; | 22 import 'package:analyzer/src/generated/source.dart'; |
| 23 | 23 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 75 server.scheduleOperation( | 75 server.scheduleOperation( |
| 76 new _DartHighlightsOperation(context, file, resolvedDartUnit)); | 76 new _DartHighlightsOperation(context, file, resolvedDartUnit)); |
| 77 } | 77 } |
| 78 if (server.hasAnalysisSubscription( | 78 if (server.hasAnalysisSubscription( |
| 79 protocol.AnalysisService.NAVIGATION, file)) { | 79 protocol.AnalysisService.NAVIGATION, file)) { |
| 80 Source source = resolvedDartUnit.element.source; | 80 Source source = resolvedDartUnit.element.source; |
| 81 server.scheduleOperation(new NavigationOperation(context, source)); | 81 server.scheduleOperation(new NavigationOperation(context, source)); |
| 82 } | 82 } |
| 83 if (server.hasAnalysisSubscription( | 83 if (server.hasAnalysisSubscription( |
| 84 protocol.AnalysisService.OCCURRENCES, file)) { | 84 protocol.AnalysisService.OCCURRENCES, file)) { |
| 85 server.scheduleOperation( | 85 Source source = resolvedDartUnit.element.source; |
| 86 new _DartOccurrencesOperation(context, file, resolvedDartUnit)); | 86 server.scheduleOperation(new OccurrencesOperation(context, source)); |
| 87 } | 87 } |
| 88 if (server.hasAnalysisSubscription( | 88 if (server.hasAnalysisSubscription( |
| 89 protocol.AnalysisService.OVERRIDES, file)) { | 89 protocol.AnalysisService.OVERRIDES, file)) { |
| 90 server.scheduleOperation( | 90 server.scheduleOperation( |
| 91 new _DartOverridesOperation(context, file, resolvedDartUnit)); | 91 new _DartOverridesOperation(context, file, resolvedDartUnit)); |
| 92 } | 92 } |
| 93 } | 93 } |
| 94 if (dartUnit != null) { | 94 if (dartUnit != null) { |
| 95 if (server.hasAnalysisSubscription( | 95 if (server.hasAnalysisSubscription( |
| 96 protocol.AnalysisService.OUTLINE, file)) { | 96 protocol.AnalysisService.OUTLINE, file)) { |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 NavigationCollectorImpl collector = | 172 NavigationCollectorImpl collector = |
| 173 computeNavigation(server, context, source, null, null); | 173 computeNavigation(server, context, source, null, null); |
| 174 String file = source.fullName; | 174 String file = source.fullName; |
| 175 var params = new protocol.AnalysisNavigationParams( | 175 var params = new protocol.AnalysisNavigationParams( |
| 176 file, collector.regions, collector.targets, collector.files); | 176 file, collector.regions, collector.targets, collector.files); |
| 177 server.sendNotification(params.toNotification()); | 177 server.sendNotification(params.toNotification()); |
| 178 }); | 178 }); |
| 179 } | 179 } |
| 180 | 180 |
| 181 void sendAnalysisNotificationOccurrences( | 181 void sendAnalysisNotificationOccurrences( |
| 182 AnalysisServer server, String file, CompilationUnit dartUnit) { | 182 AnalysisServer server, AnalysisContext context, Source source) { |
| 183 _sendNotification(server, () { | 183 _sendNotification(server, () { |
| 184 var occurrences = new DartUnitOccurrencesComputer(dartUnit).compute(); | 184 OccurrencesCollectorImpl collector = |
| 185 var params = new protocol.AnalysisOccurrencesParams(file, occurrences); | 185 computeOccurrences(server, context, source); |
| 186 String file = source.fullName; |
| 187 var params = |
| 188 new protocol.AnalysisOccurrencesParams(file, collector.allOccurrences); |
| 186 server.sendNotification(params.toNotification()); | 189 server.sendNotification(params.toNotification()); |
| 187 }); | 190 }); |
| 188 } | 191 } |
| 189 | 192 |
| 190 void sendAnalysisNotificationOutline(AnalysisServer server, String file, | 193 void sendAnalysisNotificationOutline(AnalysisServer server, String file, |
| 191 LineInfo lineInfo, CompilationUnit dartUnit) { | 194 LineInfo lineInfo, CompilationUnit dartUnit) { |
| 192 _sendNotification(server, () { | 195 _sendNotification(server, () { |
| 193 var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit); | 196 var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit); |
| 194 var outline = computer.compute(); | 197 var outline = computer.compute(); |
| 195 var params = new protocol.AnalysisOutlineParams(file, outline); | 198 var params = new protocol.AnalysisOutlineParams(file, outline); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 228 } | 231 } |
| 229 }); | 232 }); |
| 230 } | 233 } |
| 231 | 234 |
| 232 class NavigationOperation extends _NotificationOperation | 235 class NavigationOperation extends _NotificationOperation |
| 233 implements MergeableOperation { | 236 implements MergeableOperation { |
| 234 NavigationOperation(AnalysisContext context, Source source) | 237 NavigationOperation(AnalysisContext context, Source source) |
| 235 : super(context, source); | 238 : super(context, source); |
| 236 | 239 |
| 237 @override | 240 @override |
| 238 void perform(AnalysisServer server) { | |
| 239 sendAnalysisNotificationNavigation(server, context, source); | |
| 240 } | |
| 241 | |
| 242 @override | |
| 243 bool merge(ServerOperation other) { | 241 bool merge(ServerOperation other) { |
| 244 return other is NavigationOperation && | 242 return other is NavigationOperation && |
| 245 other.context == context && | 243 other.context == context && |
| 246 other.source == source; | 244 other.source == source; |
| 247 } | 245 } |
| 246 |
| 247 @override |
| 248 void perform(AnalysisServer server) { |
| 249 sendAnalysisNotificationNavigation(server, context, source); |
| 250 } |
| 251 } |
| 252 |
| 253 class OccurrencesOperation extends _NotificationOperation |
| 254 implements MergeableOperation { |
| 255 OccurrencesOperation(AnalysisContext context, Source source) |
| 256 : super(context, source); |
| 257 |
| 258 @override |
| 259 bool merge(ServerOperation other) { |
| 260 return other is OccurrencesOperation && |
| 261 other.context == context && |
| 262 other.source == source; |
| 263 } |
| 264 |
| 265 @override |
| 266 void perform(AnalysisServer server) { |
| 267 sendAnalysisNotificationOccurrences(server, context, source); |
| 268 } |
| 248 } | 269 } |
| 249 | 270 |
| 250 /** | 271 /** |
| 251 * Instances of [PerformAnalysisOperation] perform a single analysis task. | 272 * Instances of [PerformAnalysisOperation] perform a single analysis task. |
| 252 */ | 273 */ |
| 253 class PerformAnalysisOperation extends ServerOperation { | 274 class PerformAnalysisOperation extends ServerOperation { |
| 254 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE; | 275 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE; |
| 255 static const int WORKING_CACHE_SIZE = 512; | 276 static const int WORKING_CACHE_SIZE = 512; |
| 256 | 277 |
| 257 final bool isContinue; | 278 final bool isContinue; |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 403 | 424 |
| 404 _DartNotificationOperation(AnalysisContext context, String file, this.unit) | 425 _DartNotificationOperation(AnalysisContext context, String file, this.unit) |
| 405 : super(context, file); | 426 : super(context, file); |
| 406 | 427 |
| 407 @override | 428 @override |
| 408 ServerOperationPriority get priority { | 429 ServerOperationPriority get priority { |
| 409 return ServerOperationPriority.ANALYSIS_NOTIFICATION; | 430 return ServerOperationPriority.ANALYSIS_NOTIFICATION; |
| 410 } | 431 } |
| 411 } | 432 } |
| 412 | 433 |
| 413 class _DartOccurrencesOperation extends _DartNotificationOperation { | |
| 414 _DartOccurrencesOperation( | |
| 415 AnalysisContext context, String file, CompilationUnit unit) | |
| 416 : super(context, file, unit); | |
| 417 | |
| 418 @override | |
| 419 void perform(AnalysisServer server) { | |
| 420 sendAnalysisNotificationOccurrences(server, file, unit); | |
| 421 } | |
| 422 } | |
| 423 | |
| 424 class _DartOutlineOperation extends _DartNotificationOperation { | 434 class _DartOutlineOperation extends _DartNotificationOperation { |
| 425 final LineInfo lineInfo; | 435 final LineInfo lineInfo; |
| 426 | 436 |
| 427 _DartOutlineOperation( | 437 _DartOutlineOperation( |
| 428 AnalysisContext context, String file, this.lineInfo, CompilationUnit unit) | 438 AnalysisContext context, String file, this.lineInfo, CompilationUnit unit) |
| 429 : super(context, file, unit); | 439 : super(context, file, unit); |
| 430 | 440 |
| 431 @override | 441 @override |
| 432 void perform(AnalysisServer server) { | 442 void perform(AnalysisServer server) { |
| 433 sendAnalysisNotificationOutline(server, file, lineInfo, unit); | 443 sendAnalysisNotificationOutline(server, file, lineInfo, unit); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 501 abstract class _SingleFileOperation extends SourceSensitiveOperation { | 511 abstract class _SingleFileOperation extends SourceSensitiveOperation { |
| 502 final String file; | 512 final String file; |
| 503 | 513 |
| 504 _SingleFileOperation(AnalysisContext context, this.file) : super(context); | 514 _SingleFileOperation(AnalysisContext context, this.file) : super(context); |
| 505 | 515 |
| 506 @override | 516 @override |
| 507 bool shouldBeDiscardedOnSourceChange(Source source) { | 517 bool shouldBeDiscardedOnSourceChange(Source source) { |
| 508 return source.fullName == file; | 518 return source.fullName == file; |
| 509 } | 519 } |
| 510 } | 520 } |
| OLD | NEW |