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

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

Issue 1380103005: Compute Outline.kind/libraryName actually. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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
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_highlights2.dart'; 9 import 'package:analysis_server/src/computer/computer_highlights2.dart';
10 import 'package:analysis_server/src/computer/computer_outline.dart'; 10 import 'package:analysis_server/src/computer/computer_outline.dart';
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
70 server.addOperation(new _DartIndexOperation(context, file, dartUnit)); 70 server.addOperation(new _DartIndexOperation(context, file, dartUnit));
71 } 71 }
72 } 72 }
73 73
74 /** 74 /**
75 * Schedules sending notifications for the given [file] using the resolved 75 * Schedules sending notifications for the given [file] using the resolved
76 * [resolvedDartUnit]. 76 * [resolvedDartUnit].
77 */ 77 */
78 void scheduleNotificationOperations( 78 void scheduleNotificationOperations(
79 AnalysisServer server, 79 AnalysisServer server,
80 Source source,
80 String file, 81 String file,
81 LineInfo lineInfo, 82 LineInfo lineInfo,
82 AnalysisContext context, 83 AnalysisContext context,
83 CompilationUnit parsedDartUnit, 84 CompilationUnit parsedDartUnit,
84 CompilationUnit resolvedDartUnit, 85 CompilationUnit resolvedDartUnit,
85 List<AnalysisError> errors) { 86 List<AnalysisError> errors) {
86 // If the file belongs to any analysis root, check whether we're in it now. 87 // If the file belongs to any analysis root, check whether we're in it now.
87 AnalysisContext containingContext = server.getContainingContext(file); 88 AnalysisContext containingContext = server.getContainingContext(file);
88 if (containingContext != null && context != containingContext) { 89 if (containingContext != null && context != containingContext) {
89 return; 90 return;
90 } 91 }
91 // Dart 92 // Dart
92 CompilationUnit dartUnit = 93 CompilationUnit dartUnit =
93 resolvedDartUnit != null ? resolvedDartUnit : parsedDartUnit; 94 resolvedDartUnit != null ? resolvedDartUnit : parsedDartUnit;
94 if (resolvedDartUnit != null) { 95 if (resolvedDartUnit != null) {
95 if (server.hasAnalysisSubscription( 96 if (server.hasAnalysisSubscription(
96 protocol.AnalysisService.HIGHLIGHTS, file)) { 97 protocol.AnalysisService.HIGHLIGHTS, file)) {
97 server.scheduleOperation( 98 server.scheduleOperation(
98 new _DartHighlightsOperation(context, file, resolvedDartUnit)); 99 new _DartHighlightsOperation(context, file, resolvedDartUnit));
99 } 100 }
100 if (server.hasAnalysisSubscription( 101 if (server.hasAnalysisSubscription(
101 protocol.AnalysisService.NAVIGATION, file)) { 102 protocol.AnalysisService.NAVIGATION, file)) {
102 Source source = resolvedDartUnit.element.source;
103 server.scheduleOperation(new NavigationOperation(context, source)); 103 server.scheduleOperation(new NavigationOperation(context, source));
104 } 104 }
105 if (server.hasAnalysisSubscription( 105 if (server.hasAnalysisSubscription(
106 protocol.AnalysisService.OCCURRENCES, file)) { 106 protocol.AnalysisService.OCCURRENCES, file)) {
107 Source source = resolvedDartUnit.element.source;
108 server.scheduleOperation(new OccurrencesOperation(context, source)); 107 server.scheduleOperation(new OccurrencesOperation(context, source));
109 } 108 }
110 if (server.hasAnalysisSubscription( 109 if (server.hasAnalysisSubscription(
111 protocol.AnalysisService.OVERRIDES, file)) { 110 protocol.AnalysisService.OVERRIDES, file)) {
112 server.scheduleOperation( 111 server.scheduleOperation(
113 new _DartOverridesOperation(context, file, resolvedDartUnit)); 112 new _DartOverridesOperation(context, file, resolvedDartUnit));
114 } 113 }
115 } 114 }
116 if (dartUnit != null) { 115 if (dartUnit != null) {
117 if (server.hasAnalysisSubscription( 116 if (server.hasAnalysisSubscription(
118 protocol.AnalysisService.OUTLINE, file)) { 117 protocol.AnalysisService.OUTLINE, file)) {
119 server.scheduleOperation( 118 SourceKind sourceKind = context.getKindOf(source);
120 new _DartOutlineOperation(context, file, lineInfo, dartUnit)); 119 server.scheduleOperation(new _DartOutlineOperation(
120 context, file, lineInfo, sourceKind, dartUnit));
121 } 121 }
122 } 122 }
123 // errors 123 // errors
124 if (server.shouldSendErrorsNotificationFor(file)) { 124 if (server.shouldSendErrorsNotificationFor(file)) {
125 server.scheduleOperation( 125 server.scheduleOperation(
126 new _NotificationErrorsOperation(context, file, lineInfo, errors)); 126 new _NotificationErrorsOperation(context, file, lineInfo, errors));
127 } 127 }
128 } 128 }
129 129
130 void sendAnalysisNotificationAnalyzedFiles(AnalysisServer server) { 130 void sendAnalysisNotificationAnalyzedFiles(AnalysisServer server) {
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 OccurrencesCollectorImpl collector = 206 OccurrencesCollectorImpl collector =
207 computeOccurrences(server, context, source); 207 computeOccurrences(server, context, source);
208 String file = source.fullName; 208 String file = source.fullName;
209 var params = 209 var params =
210 new protocol.AnalysisOccurrencesParams(file, collector.allOccurrences); 210 new protocol.AnalysisOccurrencesParams(file, collector.allOccurrences);
211 server.sendNotification(params.toNotification()); 211 server.sendNotification(params.toNotification());
212 }); 212 });
213 } 213 }
214 214
215 void sendAnalysisNotificationOutline(AnalysisServer server, String file, 215 void sendAnalysisNotificationOutline(AnalysisServer server, String file,
216 LineInfo lineInfo, CompilationUnit dartUnit) { 216 LineInfo lineInfo, SourceKind sourceKind, CompilationUnit dartUnit) {
217 _sendNotification(server, () { 217 _sendNotification(server, () {
218 // compute FileKind
219 protocol.FileKind fileKind = protocol.FileKind.LIBRARY;
220 if (sourceKind == SourceKind.LIBRARY) {
221 fileKind = protocol.FileKind.LIBRARY;
222 } else if (sourceKind == SourceKind.PART) {
223 fileKind = protocol.FileKind.PART;
224 }
225 // compute library name
226 String libraryName = _computeLibraryName(dartUnit);
227 // compute Outline
218 var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit); 228 var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit);
219 var outline = computer.compute(); 229 protocol.Outline outline = computer.compute();
220 var params = new protocol.AnalysisOutlineParams( 230 // send notification
221 file, protocol.FileKind.LIBRARY, outline); 231 var params = new protocol.AnalysisOutlineParams(file, fileKind, outline,
232 libraryName: libraryName);
222 server.sendNotification(params.toNotification()); 233 server.sendNotification(params.toNotification());
223 }); 234 });
224 } 235 }
225 236
226 void sendAnalysisNotificationOverrides( 237 void sendAnalysisNotificationOverrides(
227 AnalysisServer server, String file, CompilationUnit dartUnit) { 238 AnalysisServer server, String file, CompilationUnit dartUnit) {
228 _sendNotification(server, () { 239 _sendNotification(server, () {
229 var overrides = new DartUnitOverridesComputer(dartUnit).compute(); 240 var overrides = new DartUnitOverridesComputer(dartUnit).compute();
230 var params = new protocol.AnalysisOverridesParams(file, overrides); 241 var params = new protocol.AnalysisOverridesParams(file, overrides);
231 server.sendNotification(params.toNotification()); 242 server.sendNotification(params.toNotification());
232 }); 243 });
233 } 244 }
234 245
235 /** 246 /**
236 * Sets the cache size in the given [context] to the given value. 247 * Sets the cache size in the given [context] to the given value.
237 */ 248 */
238 void setCacheSize(AnalysisContext context, int cacheSize) { 249 void setCacheSize(AnalysisContext context, int cacheSize) {
239 AnalysisOptionsImpl options = 250 AnalysisOptionsImpl options =
240 new AnalysisOptionsImpl.from(context.analysisOptions); 251 new AnalysisOptionsImpl.from(context.analysisOptions);
241 options.cacheSize = cacheSize; 252 options.cacheSize = cacheSize;
242 context.analysisOptions = options; 253 context.analysisOptions = options;
243 } 254 }
244 255
256 String _computeLibraryName(CompilationUnit unit) {
257 for (Directive directive in unit.directives) {
258 if (directive is LibraryDirective && directive.name != null) {
259 return directive.name.name;
260 }
261 }
262 for (Directive directive in unit.directives) {
263 if (directive is PartOfDirective && directive.libraryName != null) {
264 return directive.libraryName.name;
265 }
266 }
267 return null;
268 }
269
245 /** 270 /**
246 * Runs the given notification producing function [f], catching exceptions. 271 * Runs the given notification producing function [f], catching exceptions.
247 */ 272 */
248 void _sendNotification(AnalysisServer server, f()) { 273 void _sendNotification(AnalysisServer server, f()) {
249 ServerPerformanceStatistics.notices.makeCurrentWhile(() { 274 ServerPerformanceStatistics.notices.makeCurrentWhile(() {
250 try { 275 try {
251 f(); 276 f();
252 } catch (exception, stackTrace) { 277 } catch (exception, stackTrace) {
253 server.sendServerErrorNotification(exception, stackTrace); 278 server.sendServerErrorNotification(exception, stackTrace);
254 } 279 }
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 * Send the information in the given list of notices back to the client. 390 * Send the information in the given list of notices back to the client.
366 */ 391 */
367 void _sendNotices(AnalysisServer server, List<ChangeNotice> notices) { 392 void _sendNotices(AnalysisServer server, List<ChangeNotice> notices) {
368 for (int i = 0; i < notices.length; i++) { 393 for (int i = 0; i < notices.length; i++) {
369 ChangeNotice notice = notices[i]; 394 ChangeNotice notice = notices[i];
370 Source source = notice.source; 395 Source source = notice.source;
371 String file = source.fullName; 396 String file = source.fullName;
372 // Dart 397 // Dart
373 CompilationUnit parsedDartUnit = notice.parsedDartUnit; 398 CompilationUnit parsedDartUnit = notice.parsedDartUnit;
374 CompilationUnit resolvedDartUnit = notice.resolvedDartUnit; 399 CompilationUnit resolvedDartUnit = notice.resolvedDartUnit;
375 scheduleNotificationOperations(server, file, notice.lineInfo, context, 400 scheduleNotificationOperations(server, source, file, notice.lineInfo,
376 parsedDartUnit, resolvedDartUnit, notice.errors); 401 context, parsedDartUnit, resolvedDartUnit, notice.errors);
377 // done 402 // done
378 server.fileAnalyzed(notice); 403 server.fileAnalyzed(notice);
379 } 404 }
380 } 405 }
381 406
382 void _updateIndex(AnalysisServer server, List<ChangeNotice> notices) { 407 void _updateIndex(AnalysisServer server, List<ChangeNotice> notices) {
383 if (server.index == null) { 408 if (server.index == null) {
384 return; 409 return;
385 } 410 }
386 for (ChangeNotice notice in notices) { 411 for (ChangeNotice notice in notices) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
449 : super(context, file); 474 : super(context, file);
450 475
451 @override 476 @override
452 ServerOperationPriority get priority { 477 ServerOperationPriority get priority {
453 return ServerOperationPriority.ANALYSIS_NOTIFICATION; 478 return ServerOperationPriority.ANALYSIS_NOTIFICATION;
454 } 479 }
455 } 480 }
456 481
457 class _DartOutlineOperation extends _DartNotificationOperation { 482 class _DartOutlineOperation extends _DartNotificationOperation {
458 final LineInfo lineInfo; 483 final LineInfo lineInfo;
484 final SourceKind sourceKind;
459 485
460 _DartOutlineOperation( 486 _DartOutlineOperation(AnalysisContext context, String file, this.lineInfo,
461 AnalysisContext context, String file, this.lineInfo, CompilationUnit unit) 487 this.sourceKind, CompilationUnit unit)
462 : super(context, file, unit); 488 : super(context, file, unit);
463 489
464 @override 490 @override
465 void perform(AnalysisServer server) { 491 void perform(AnalysisServer server) {
466 sendAnalysisNotificationOutline(server, file, lineInfo, unit); 492 sendAnalysisNotificationOutline(server, file, lineInfo, sourceKind, unit);
467 } 493 }
468 } 494 }
469 495
470 class _DartOverridesOperation extends _DartNotificationOperation { 496 class _DartOverridesOperation extends _DartNotificationOperation {
471 _DartOverridesOperation( 497 _DartOverridesOperation(
472 AnalysisContext context, String file, CompilationUnit unit) 498 AnalysisContext context, String file, CompilationUnit unit)
473 : super(context, file, unit); 499 : super(context, file, unit);
474 500
475 @override 501 @override
476 void perform(AnalysisServer server) { 502 void perform(AnalysisServer server) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
534 abstract class _SingleFileOperation extends SourceSensitiveOperation { 560 abstract class _SingleFileOperation extends SourceSensitiveOperation {
535 final String file; 561 final String file;
536 562
537 _SingleFileOperation(AnalysisContext context, this.file) : super(context); 563 _SingleFileOperation(AnalysisContext context, this.file) : super(context);
538 564
539 @override 565 @override
540 bool shouldBeDiscardedOnSourceChange(Source source) { 566 bool shouldBeDiscardedOnSourceChange(Source source) {
541 return source.fullName == file; 567 return source.fullName == file;
542 } 568 }
543 } 569 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698