Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(88)

Side by Side Diff: pkg/analysis_server/lib/src/operation/operation_analysis.dart

Issue 988593002: Don't send notifications for disposed contexts. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 if (server.getAnalysisContext(file) != context) { 44 if (server.getAnalysisContext(file) != context) {
45 return; 45 return;
46 } 46 }
47 // Dart 47 // Dart
48 CompilationUnit dartUnit = 48 CompilationUnit dartUnit =
49 resolvedDartUnit != null ? resolvedDartUnit : parsedDartUnit; 49 resolvedDartUnit != null ? resolvedDartUnit : parsedDartUnit;
50 if (resolvedDartUnit != null) { 50 if (resolvedDartUnit != null) {
51 if (server.hasAnalysisSubscription( 51 if (server.hasAnalysisSubscription(
52 protocol.AnalysisService.HIGHLIGHTS, file)) { 52 protocol.AnalysisService.HIGHLIGHTS, file)) {
53 server.scheduleOperation( 53 server.scheduleOperation(
54 new _DartHighlightsOperation(file, resolvedDartUnit)); 54 new _DartHighlightsOperation(context, file, resolvedDartUnit));
55 } 55 }
56 if (server.hasAnalysisSubscription( 56 if (server.hasAnalysisSubscription(
57 protocol.AnalysisService.NAVIGATION, file)) { 57 protocol.AnalysisService.NAVIGATION, file)) {
58 server.scheduleOperation( 58 server.scheduleOperation(
59 new _DartNavigationOperation(file, resolvedDartUnit)); 59 new _DartNavigationOperation(context, file, resolvedDartUnit));
60 } 60 }
61 if (server.hasAnalysisSubscription( 61 if (server.hasAnalysisSubscription(
62 protocol.AnalysisService.OCCURRENCES, file)) { 62 protocol.AnalysisService.OCCURRENCES, file)) {
63 server.scheduleOperation( 63 server.scheduleOperation(
64 new _DartOccurrencesOperation(file, resolvedDartUnit)); 64 new _DartOccurrencesOperation(context, file, resolvedDartUnit));
65 } 65 }
66 if (server.hasAnalysisSubscription( 66 if (server.hasAnalysisSubscription(
67 protocol.AnalysisService.OVERRIDES, file)) { 67 protocol.AnalysisService.OVERRIDES, file)) {
68 server.scheduleOperation( 68 server.scheduleOperation(
69 new _DartOverridesOperation(file, resolvedDartUnit)); 69 new _DartOverridesOperation(context, file, resolvedDartUnit));
70 } 70 }
71 } 71 }
72 if (dartUnit != null) { 72 if (dartUnit != null) {
73 if (server.hasAnalysisSubscription( 73 if (server.hasAnalysisSubscription(
74 protocol.AnalysisService.OUTLINE, file)) { 74 protocol.AnalysisService.OUTLINE, file)) {
75 server.scheduleOperation( 75 server.scheduleOperation(
76 new _DartOutlineOperation(file, lineInfo, dartUnit)); 76 new _DartOutlineOperation(context, file, lineInfo, dartUnit));
77 } 77 }
78 } 78 }
79 // errors 79 // errors
80 if (server.shouldSendErrorsNotificationFor(file)) { 80 if (server.shouldSendErrorsNotificationFor(file)) {
81 server.scheduleOperation( 81 server.scheduleOperation(
82 new _NotificationErrorsOperation(file, lineInfo, errors)); 82 new _NotificationErrorsOperation(context, file, lineInfo, errors));
83 } 83 }
84 } 84 }
85 85
86 void sendAnalysisNotificationErrors(AnalysisServer server, String file, 86 void sendAnalysisNotificationErrors(AnalysisServer server, String file,
87 LineInfo lineInfo, List<AnalysisError> errors) { 87 LineInfo lineInfo, List<AnalysisError> errors) {
88 _sendNotification(server, () { 88 _sendNotification(server, () {
89 if (errors == null) { 89 if (errors == null) {
90 errors = <AnalysisError>[]; 90 errors = <AnalysisError>[];
91 } 91 }
92 var serverErrors = 92 var serverErrors =
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 }); 157 });
158 } 158 }
159 159
160 /** 160 /**
161 * Instances of [PerformAnalysisOperation] perform a single analysis task. 161 * Instances of [PerformAnalysisOperation] perform a single analysis task.
162 */ 162 */
163 class PerformAnalysisOperation extends ServerOperation { 163 class PerformAnalysisOperation extends ServerOperation {
164 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE; 164 static const int IDLE_CACHE_SIZE = AnalysisOptionsImpl.DEFAULT_CACHE_SIZE;
165 static const int WORKING_CACHE_SIZE = 512; 165 static const int WORKING_CACHE_SIZE = 512;
166 166
167 final AnalysisContext context;
168 final bool isContinue; 167 final bool isContinue;
169 168
170 PerformAnalysisOperation(this.context, this.isContinue); 169 PerformAnalysisOperation(AnalysisContext context, this.isContinue)
170 : super(context);
171 171
172 @override 172 @override
173 ServerOperationPriority get priority { 173 ServerOperationPriority get priority {
174 if (_isPriorityContext) { 174 if (_isPriorityContext) {
175 if (isContinue) { 175 if (isContinue) {
176 return ServerOperationPriority.PRIORITY_ANALYSIS_CONTINUE; 176 return ServerOperationPriority.PRIORITY_ANALYSIS_CONTINUE;
177 } else { 177 } else {
178 return ServerOperationPriority.PRIORITY_ANALYSIS; 178 return ServerOperationPriority.PRIORITY_ANALYSIS;
179 } 179 }
180 } else { 180 } else {
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 server.addOperation(new _HtmlIndexOperation(context, file, htmlUnit)); 268 server.addOperation(new _HtmlIndexOperation(context, file, htmlUnit));
269 } 269 }
270 } catch (exception, stackTrace) { 270 } catch (exception, stackTrace) {
271 server.sendServerErrorNotification(exception, stackTrace); 271 server.sendServerErrorNotification(exception, stackTrace);
272 } 272 }
273 } 273 }
274 } 274 }
275 } 275 }
276 276
277 class _DartHighlightsOperation extends _DartNotificationOperation { 277 class _DartHighlightsOperation extends _DartNotificationOperation {
278 _DartHighlightsOperation(String file, CompilationUnit unit) 278 _DartHighlightsOperation(
279 : super(file, unit); 279 AnalysisContext context, String file, CompilationUnit unit)
280 : super(context, file, unit);
280 281
281 @override 282 @override
282 void perform(AnalysisServer server) { 283 void perform(AnalysisServer server) {
283 sendAnalysisNotificationHighlights(server, file, unit); 284 sendAnalysisNotificationHighlights(server, file, unit);
284 } 285 }
285 } 286 }
286 287
287 class _DartIndexOperation extends _SingleFileOperation { 288 class _DartIndexOperation extends _SingleFileOperation {
288 final AnalysisContext context;
289 final CompilationUnit unit; 289 final CompilationUnit unit;
290 290
291 _DartIndexOperation(this.context, String file, this.unit) : super(file); 291 _DartIndexOperation(AnalysisContext context, String file, this.unit)
292 : super(context, file);
292 293
293 @override 294 @override
294 ServerOperationPriority get priority { 295 ServerOperationPriority get priority {
295 return ServerOperationPriority.ANALYSIS_INDEX; 296 return ServerOperationPriority.ANALYSIS_INDEX;
296 } 297 }
297 298
298 @override 299 @override
299 void perform(AnalysisServer server) { 300 void perform(AnalysisServer server) {
300 ServerPerformanceStatistics.indexOperation.makeCurrentWhile(() { 301 ServerPerformanceStatistics.indexOperation.makeCurrentWhile(() {
301 Index index = server.index; 302 Index index = server.index;
302 index.indexUnit(context, unit); 303 index.indexUnit(context, unit);
303 }); 304 });
304 } 305 }
305 } 306 }
306 307
307 class _DartNavigationOperation extends _DartNotificationOperation { 308 class _DartNavigationOperation extends _DartNotificationOperation {
308 _DartNavigationOperation(String file, CompilationUnit unit) 309 _DartNavigationOperation(
309 : super(file, unit); 310 AnalysisContext context, String file, CompilationUnit unit)
311 : super(context, file, unit);
310 312
311 @override 313 @override
312 void perform(AnalysisServer server) { 314 void perform(AnalysisServer server) {
313 sendAnalysisNotificationNavigation(server, file, unit); 315 sendAnalysisNotificationNavigation(server, file, unit);
314 } 316 }
315 } 317 }
316 318
317 abstract class _DartNotificationOperation extends _SingleFileOperation { 319 abstract class _DartNotificationOperation extends _SingleFileOperation {
318 final CompilationUnit unit; 320 final CompilationUnit unit;
319 321
320 _DartNotificationOperation(String file, this.unit) : super(file); 322 _DartNotificationOperation(AnalysisContext context, String file, this.unit)
323 : super(context, file);
321 324
322 @override 325 @override
323 ServerOperationPriority get priority { 326 ServerOperationPriority get priority {
324 return ServerOperationPriority.ANALYSIS_NOTIFICATION; 327 return ServerOperationPriority.ANALYSIS_NOTIFICATION;
325 } 328 }
326 } 329 }
327 330
328 class _DartOccurrencesOperation extends _DartNotificationOperation { 331 class _DartOccurrencesOperation extends _DartNotificationOperation {
329 _DartOccurrencesOperation(String file, CompilationUnit unit) 332 _DartOccurrencesOperation(
330 : super(file, unit); 333 AnalysisContext context, String file, CompilationUnit unit)
334 : super(context, file, unit);
331 335
332 @override 336 @override
333 void perform(AnalysisServer server) { 337 void perform(AnalysisServer server) {
334 sendAnalysisNotificationOccurrences(server, file, unit); 338 sendAnalysisNotificationOccurrences(server, file, unit);
335 } 339 }
336 } 340 }
337 341
338 class _DartOutlineOperation extends _DartNotificationOperation { 342 class _DartOutlineOperation extends _DartNotificationOperation {
339 final LineInfo lineInfo; 343 final LineInfo lineInfo;
340 344
341 _DartOutlineOperation(String file, this.lineInfo, CompilationUnit unit) 345 _DartOutlineOperation(
342 : super(file, unit); 346 AnalysisContext context, String file, this.lineInfo, CompilationUnit unit)
347 : super(context, file, unit);
343 348
344 @override 349 @override
345 void perform(AnalysisServer server) { 350 void perform(AnalysisServer server) {
346 sendAnalysisNotificationOutline(server, file, lineInfo, unit); 351 sendAnalysisNotificationOutline(server, file, lineInfo, unit);
347 } 352 }
348 } 353 }
349 354
350 class _DartOverridesOperation extends _DartNotificationOperation { 355 class _DartOverridesOperation extends _DartNotificationOperation {
351 _DartOverridesOperation(String file, CompilationUnit unit) 356 _DartOverridesOperation(
352 : super(file, unit); 357 AnalysisContext context, String file, CompilationUnit unit)
358 : super(context, file, unit);
353 359
354 @override 360 @override
355 void perform(AnalysisServer server) { 361 void perform(AnalysisServer server) {
356 sendAnalysisNotificationOverrides(server, file, unit); 362 sendAnalysisNotificationOverrides(server, file, unit);
357 } 363 }
358 } 364 }
359 365
360 class _HtmlIndexOperation extends _SingleFileOperation { 366 class _HtmlIndexOperation extends _SingleFileOperation {
361 final AnalysisContext context;
362 final HtmlUnit unit; 367 final HtmlUnit unit;
363 368
364 _HtmlIndexOperation(this.context, String file, this.unit) : super(file); 369 _HtmlIndexOperation(AnalysisContext context, String file, this.unit)
370 : super(context, file);
365 371
366 @override 372 @override
367 ServerOperationPriority get priority { 373 ServerOperationPriority get priority {
368 return ServerOperationPriority.ANALYSIS_INDEX; 374 return ServerOperationPriority.ANALYSIS_INDEX;
369 } 375 }
370 376
371 @override 377 @override
372 void perform(AnalysisServer server) { 378 void perform(AnalysisServer server) {
373 Index index = server.index; 379 Index index = server.index;
374 index.indexHtmlUnit(context, unit); 380 index.indexHtmlUnit(context, unit);
375 } 381 }
376 } 382 }
377 383
378 class _NotificationErrorsOperation extends _SingleFileOperation { 384 class _NotificationErrorsOperation extends _SingleFileOperation {
379 final LineInfo lineInfo; 385 final LineInfo lineInfo;
380 final List<AnalysisError> errors; 386 final List<AnalysisError> errors;
381 387
382 _NotificationErrorsOperation(String file, this.lineInfo, this.errors) 388 _NotificationErrorsOperation(
383 : super(file); 389 AnalysisContext context, String file, this.lineInfo, this.errors)
390 : super(context, file);
384 391
385 @override 392 @override
386 ServerOperationPriority get priority { 393 ServerOperationPriority get priority {
387 return ServerOperationPriority.ANALYSIS_NOTIFICATION; 394 return ServerOperationPriority.ANALYSIS_NOTIFICATION;
388 } 395 }
389 396
390 @override 397 @override
391 void perform(AnalysisServer server) { 398 void perform(AnalysisServer server) {
392 sendAnalysisNotificationErrors(server, file, lineInfo, errors); 399 sendAnalysisNotificationErrors(server, file, lineInfo, errors);
393 } 400 }
394 } 401 }
395 402
396 abstract class _SingleFileOperation extends SourceSensitiveOperation { 403 abstract class _SingleFileOperation extends SourceSensitiveOperation {
397 final String file; 404 final String file;
398 405
399 _SingleFileOperation(this.file); 406 _SingleFileOperation(AnalysisContext context, this.file) : super(context);
400 407
401 @override 408 @override
402 bool shouldBeDiscardedOnSourceChange(Source source) { 409 bool shouldBeDiscardedOnSourceChange(Source source) {
403 return source.fullName == file; 410 return source.fullName == file;
404 } 411 }
405 } 412 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698