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_navigation.dart'; | 9 import 'package:analysis_server/src/computer/computer_navigation.dart'; |
10 import 'package:analysis_server/src/computer/computer_occurrences.dart'; | 10 import 'package:analysis_server/src/computer/computer_occurrences.dart'; |
(...skipping 25 matching lines...) Expand all Loading... |
36 void scheduleNotificationOperations(AnalysisServer server, String file, | 36 void scheduleNotificationOperations(AnalysisServer server, String file, |
37 LineInfo lineInfo, AnalysisContext context, CompilationUnit parsedDartUnit, | 37 LineInfo lineInfo, AnalysisContext context, CompilationUnit parsedDartUnit, |
38 CompilationUnit resolvedDartUnit, List<AnalysisError> errors) { | 38 CompilationUnit resolvedDartUnit, List<AnalysisError> errors) { |
39 // Dart | 39 // Dart |
40 CompilationUnit dartUnit = | 40 CompilationUnit dartUnit = |
41 resolvedDartUnit != null ? resolvedDartUnit : parsedDartUnit; | 41 resolvedDartUnit != null ? resolvedDartUnit : parsedDartUnit; |
42 if (resolvedDartUnit != null) { | 42 if (resolvedDartUnit != null) { |
43 if (server.hasAnalysisSubscription( | 43 if (server.hasAnalysisSubscription( |
44 protocol.AnalysisService.HIGHLIGHTS, file)) { | 44 protocol.AnalysisService.HIGHLIGHTS, file)) { |
45 server.scheduleOperation( | 45 server.scheduleOperation( |
46 new _DartHighlightsOperation(file, resolvedDartUnit)); | 46 new _DartHighlightsOperation(context, file, resolvedDartUnit)); |
47 } | 47 } |
48 if (server.hasAnalysisSubscription( | 48 if (server.hasAnalysisSubscription( |
49 protocol.AnalysisService.NAVIGATION, file)) { | 49 protocol.AnalysisService.NAVIGATION, file)) { |
50 server.scheduleOperation( | 50 server.scheduleOperation( |
51 new _DartNavigationOperation(file, resolvedDartUnit)); | 51 new _DartNavigationOperation(context, file, resolvedDartUnit)); |
52 } | 52 } |
53 if (server.hasAnalysisSubscription( | 53 if (server.hasAnalysisSubscription( |
54 protocol.AnalysisService.OCCURRENCES, file)) { | 54 protocol.AnalysisService.OCCURRENCES, file)) { |
55 server.scheduleOperation( | 55 server.scheduleOperation( |
56 new _DartOccurrencesOperation(file, resolvedDartUnit)); | 56 new _DartOccurrencesOperation(context, file, resolvedDartUnit)); |
57 } | 57 } |
58 if (server.hasAnalysisSubscription( | 58 if (server.hasAnalysisSubscription( |
59 protocol.AnalysisService.OVERRIDES, file)) { | 59 protocol.AnalysisService.OVERRIDES, file)) { |
60 server.scheduleOperation( | 60 server.scheduleOperation( |
61 new _DartOverridesOperation(file, resolvedDartUnit)); | 61 new _DartOverridesOperation(context, file, resolvedDartUnit)); |
62 } | 62 } |
63 } | 63 } |
64 if (dartUnit != null) { | 64 if (dartUnit != null) { |
65 if (server.hasAnalysisSubscription( | 65 if (server.hasAnalysisSubscription( |
66 protocol.AnalysisService.OUTLINE, file)) { | 66 protocol.AnalysisService.OUTLINE, file)) { |
67 server.scheduleOperation( | 67 server.scheduleOperation( |
68 new _DartOutlineOperation(file, lineInfo, dartUnit)); | 68 new _DartOutlineOperation(context, file, lineInfo, dartUnit)); |
69 } | 69 } |
70 } | 70 } |
71 // errors | 71 // errors |
72 if (server.shouldSendErrorsNotificationFor(file)) { | 72 if (server.shouldSendErrorsNotificationFor(file)) { |
73 server.scheduleOperation( | 73 server.scheduleOperation( |
74 new _NotificationErrorsOperation(file, lineInfo, errors)); | 74 new _NotificationErrorsOperation(context, file, lineInfo, errors)); |
75 } | 75 } |
76 } | 76 } |
77 | 77 |
78 void sendAnalysisNotificationErrors(AnalysisServer server, String file, | 78 void sendAnalysisNotificationErrors(AnalysisServer server, String file, |
79 LineInfo lineInfo, List<AnalysisError> errors) { | 79 LineInfo lineInfo, List<AnalysisError> errors) { |
80 _sendNotification(server, () { | 80 _sendNotification(server, () { |
81 if (errors == null) { | 81 if (errors == null) { |
82 errors = <AnalysisError>[]; | 82 errors = <AnalysisError>[]; |
83 } | 83 } |
84 var serverErrors = | 84 var serverErrors = |
85 protocol.doAnalysisError_listFromEngine(lineInfo, errors); | 85 protocol.doAnalysisError_listFromEngine(lineInfo, errors); |
86 var params = new protocol.AnalysisErrorsParams(file, serverErrors); | 86 var params = new protocol.AnalysisErrorsParams(file, serverErrors); |
87 server.sendNotification(params.toNotification()); | 87 server.sendNotification(params.toNotification()); |
88 }); | 88 }); |
89 } | 89 } |
90 | 90 |
| 91 void sendAnalysisNotificationFlushResults( |
| 92 AnalysisServer server, List<String> files) { |
| 93 _sendNotification(server, () { |
| 94 if (files != null && files.isNotEmpty) { |
| 95 var params = new protocol.AnalysisFlushResultsParams(files); |
| 96 server.sendNotification(params.toNotification()); |
| 97 } |
| 98 }); |
| 99 } |
| 100 |
91 void sendAnalysisNotificationHighlights( | 101 void sendAnalysisNotificationHighlights( |
92 AnalysisServer server, String file, CompilationUnit dartUnit) { | 102 AnalysisServer server, String file, CompilationUnit dartUnit) { |
93 _sendNotification(server, () { | 103 _sendNotification(server, () { |
94 var regions = new DartUnitHighlightsComputer(dartUnit).compute(); | 104 var regions = new DartUnitHighlightsComputer(dartUnit).compute(); |
95 var params = new protocol.AnalysisHighlightsParams(file, regions); | 105 var params = new protocol.AnalysisHighlightsParams(file, regions); |
96 server.sendNotification(params.toNotification()); | 106 server.sendNotification(params.toNotification()); |
97 }); | 107 }); |
98 } | 108 } |
99 | 109 |
100 void sendAnalysisNotificationNavigation( | 110 void sendAnalysisNotificationNavigation( |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
149 }); | 159 }); |
150 } | 160 } |
151 | 161 |
152 /** | 162 /** |
153 * Instances of [PerformAnalysisOperation] perform a single analysis task. | 163 * Instances of [PerformAnalysisOperation] perform a single analysis task. |
154 */ | 164 */ |
155 class PerformAnalysisOperation extends ServerOperation { | 165 class PerformAnalysisOperation extends ServerOperation { |
156 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE; | 166 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE; |
157 static const int WORKING_CACHE_SIZE = 512; | 167 static const int WORKING_CACHE_SIZE = 512; |
158 | 168 |
159 final AnalysisContext context; | |
160 final bool isContinue; | 169 final bool isContinue; |
161 | 170 |
162 PerformAnalysisOperation(this.context, this.isContinue); | 171 PerformAnalysisOperation(AnalysisContext context, this.isContinue) |
| 172 : super(context); |
163 | 173 |
164 @override | 174 @override |
165 ServerOperationPriority get priority { | 175 ServerOperationPriority get priority { |
166 if (_isPriorityContext) { | 176 if (_isPriorityContext) { |
167 if (isContinue) { | 177 if (isContinue) { |
168 return ServerOperationPriority.PRIORITY_ANALYSIS_CONTINUE; | 178 return ServerOperationPriority.PRIORITY_ANALYSIS_CONTINUE; |
169 } else { | 179 } else { |
170 return ServerOperationPriority.PRIORITY_ANALYSIS; | 180 return ServerOperationPriority.PRIORITY_ANALYSIS; |
171 } | 181 } |
172 } else { | 182 } else { |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
259 server.addOperation(new _HtmlIndexOperation(context, file, htmlUnit)); | 269 server.addOperation(new _HtmlIndexOperation(context, file, htmlUnit)); |
260 } | 270 } |
261 } catch (exception, stackTrace) { | 271 } catch (exception, stackTrace) { |
262 server.sendServerErrorNotification(exception, stackTrace); | 272 server.sendServerErrorNotification(exception, stackTrace); |
263 } | 273 } |
264 } | 274 } |
265 } | 275 } |
266 } | 276 } |
267 | 277 |
268 class _DartHighlightsOperation extends _DartNotificationOperation { | 278 class _DartHighlightsOperation extends _DartNotificationOperation { |
269 _DartHighlightsOperation(String file, CompilationUnit unit) | 279 _DartHighlightsOperation( |
270 : super(file, unit); | 280 AnalysisContext context, String file, CompilationUnit unit) |
| 281 : super(context, file, unit); |
271 | 282 |
272 @override | 283 @override |
273 void perform(AnalysisServer server) { | 284 void perform(AnalysisServer server) { |
274 sendAnalysisNotificationHighlights(server, file, unit); | 285 sendAnalysisNotificationHighlights(server, file, unit); |
275 } | 286 } |
276 } | 287 } |
277 | 288 |
278 class _DartIndexOperation extends _SingleFileOperation { | 289 class _DartIndexOperation extends _SingleFileOperation { |
279 final AnalysisContext context; | |
280 final CompilationUnit unit; | 290 final CompilationUnit unit; |
281 | 291 |
282 _DartIndexOperation(this.context, String file, this.unit) : super(file); | 292 _DartIndexOperation(AnalysisContext context, String file, this.unit) |
| 293 : super(context, file); |
283 | 294 |
284 @override | 295 @override |
285 ServerOperationPriority get priority { | 296 ServerOperationPriority get priority { |
286 return ServerOperationPriority.ANALYSIS_INDEX; | 297 return ServerOperationPriority.ANALYSIS_INDEX; |
287 } | 298 } |
288 | 299 |
289 @override | 300 @override |
290 void perform(AnalysisServer server) { | 301 void perform(AnalysisServer server) { |
291 ServerPerformanceStatistics.indexOperation.makeCurrentWhile(() { | 302 ServerPerformanceStatistics.indexOperation.makeCurrentWhile(() { |
292 Index index = server.index; | 303 Index index = server.index; |
293 index.indexUnit(context, unit); | 304 index.indexUnit(context, unit); |
294 }); | 305 }); |
295 } | 306 } |
296 } | 307 } |
297 | 308 |
298 class _DartNavigationOperation extends _DartNotificationOperation { | 309 class _DartNavigationOperation extends _DartNotificationOperation { |
299 _DartNavigationOperation(String file, CompilationUnit unit) | 310 _DartNavigationOperation( |
300 : super(file, unit); | 311 AnalysisContext context, String file, CompilationUnit unit) |
| 312 : super(context, file, unit); |
301 | 313 |
302 @override | 314 @override |
303 void perform(AnalysisServer server) { | 315 void perform(AnalysisServer server) { |
304 sendAnalysisNotificationNavigation(server, file, unit); | 316 sendAnalysisNotificationNavigation(server, file, unit); |
305 } | 317 } |
306 } | 318 } |
307 | 319 |
308 abstract class _DartNotificationOperation extends _SingleFileOperation { | 320 abstract class _DartNotificationOperation extends _SingleFileOperation { |
309 final CompilationUnit unit; | 321 final CompilationUnit unit; |
310 | 322 |
311 _DartNotificationOperation(String file, this.unit) : super(file); | 323 _DartNotificationOperation(AnalysisContext context, String file, this.unit) |
| 324 : super(context, file); |
312 | 325 |
313 @override | 326 @override |
314 ServerOperationPriority get priority { | 327 ServerOperationPriority get priority { |
315 return ServerOperationPriority.ANALYSIS_NOTIFICATION; | 328 return ServerOperationPriority.ANALYSIS_NOTIFICATION; |
316 } | 329 } |
317 } | 330 } |
318 | 331 |
319 class _DartOccurrencesOperation extends _DartNotificationOperation { | 332 class _DartOccurrencesOperation extends _DartNotificationOperation { |
320 _DartOccurrencesOperation(String file, CompilationUnit unit) | 333 _DartOccurrencesOperation( |
321 : super(file, unit); | 334 AnalysisContext context, String file, CompilationUnit unit) |
| 335 : super(context, file, unit); |
322 | 336 |
323 @override | 337 @override |
324 void perform(AnalysisServer server) { | 338 void perform(AnalysisServer server) { |
325 sendAnalysisNotificationOccurrences(server, file, unit); | 339 sendAnalysisNotificationOccurrences(server, file, unit); |
326 } | 340 } |
327 } | 341 } |
328 | 342 |
329 class _DartOutlineOperation extends _DartNotificationOperation { | 343 class _DartOutlineOperation extends _DartNotificationOperation { |
330 final LineInfo lineInfo; | 344 final LineInfo lineInfo; |
331 | 345 |
332 _DartOutlineOperation(String file, this.lineInfo, CompilationUnit unit) | 346 _DartOutlineOperation( |
333 : super(file, unit); | 347 AnalysisContext context, String file, this.lineInfo, CompilationUnit unit) |
| 348 : super(context, file, unit); |
334 | 349 |
335 @override | 350 @override |
336 void perform(AnalysisServer server) { | 351 void perform(AnalysisServer server) { |
337 sendAnalysisNotificationOutline(server, file, lineInfo, unit); | 352 sendAnalysisNotificationOutline(server, file, lineInfo, unit); |
338 } | 353 } |
339 } | 354 } |
340 | 355 |
341 class _DartOverridesOperation extends _DartNotificationOperation { | 356 class _DartOverridesOperation extends _DartNotificationOperation { |
342 _DartOverridesOperation(String file, CompilationUnit unit) | 357 _DartOverridesOperation( |
343 : super(file, unit); | 358 AnalysisContext context, String file, CompilationUnit unit) |
| 359 : super(context, file, unit); |
344 | 360 |
345 @override | 361 @override |
346 void perform(AnalysisServer server) { | 362 void perform(AnalysisServer server) { |
347 sendAnalysisNotificationOverrides(server, file, unit); | 363 sendAnalysisNotificationOverrides(server, file, unit); |
348 } | 364 } |
349 } | 365 } |
350 | 366 |
351 class _HtmlIndexOperation extends _SingleFileOperation { | 367 class _HtmlIndexOperation extends _SingleFileOperation { |
352 final AnalysisContext context; | |
353 final HtmlUnit unit; | 368 final HtmlUnit unit; |
354 | 369 |
355 _HtmlIndexOperation(this.context, String file, this.unit) : super(file); | 370 _HtmlIndexOperation(AnalysisContext context, String file, this.unit) |
| 371 : super(context, file); |
356 | 372 |
357 @override | 373 @override |
358 ServerOperationPriority get priority { | 374 ServerOperationPriority get priority { |
359 return ServerOperationPriority.ANALYSIS_INDEX; | 375 return ServerOperationPriority.ANALYSIS_INDEX; |
360 } | 376 } |
361 | 377 |
362 @override | 378 @override |
363 void perform(AnalysisServer server) { | 379 void perform(AnalysisServer server) { |
364 Index index = server.index; | 380 Index index = server.index; |
365 index.indexHtmlUnit(context, unit); | 381 index.indexHtmlUnit(context, unit); |
366 } | 382 } |
367 } | 383 } |
368 | 384 |
369 class _NotificationErrorsOperation extends _SingleFileOperation { | 385 class _NotificationErrorsOperation extends _SingleFileOperation { |
370 final LineInfo lineInfo; | 386 final LineInfo lineInfo; |
371 final List<AnalysisError> errors; | 387 final List<AnalysisError> errors; |
372 | 388 |
373 _NotificationErrorsOperation(String file, this.lineInfo, this.errors) | 389 _NotificationErrorsOperation( |
374 : super(file); | 390 AnalysisContext context, String file, this.lineInfo, this.errors) |
| 391 : super(context, file); |
375 | 392 |
376 @override | 393 @override |
377 ServerOperationPriority get priority { | 394 ServerOperationPriority get priority { |
378 return ServerOperationPriority.ANALYSIS_NOTIFICATION; | 395 return ServerOperationPriority.ANALYSIS_NOTIFICATION; |
379 } | 396 } |
380 | 397 |
381 @override | 398 @override |
382 void perform(AnalysisServer server) { | 399 void perform(AnalysisServer server) { |
383 sendAnalysisNotificationErrors(server, file, lineInfo, errors); | 400 sendAnalysisNotificationErrors(server, file, lineInfo, errors); |
384 } | 401 } |
385 } | 402 } |
386 | 403 |
387 abstract class _SingleFileOperation extends SourceSensitiveOperation { | 404 abstract class _SingleFileOperation extends SourceSensitiveOperation { |
388 final String file; | 405 final String file; |
389 | 406 |
390 _SingleFileOperation(this.file); | 407 _SingleFileOperation(AnalysisContext context, this.file) : super(context); |
391 | 408 |
392 @override | 409 @override |
393 bool shouldBeDiscardedOnSourceChange(Source source) { | 410 bool shouldBeDiscardedOnSourceChange(Source source) { |
394 return source.fullName == file; | 411 return source.fullName == file; |
395 } | 412 } |
396 } | 413 } |
OLD | NEW |