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

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

Issue 946803002: Create package: URIs everywhere (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 years, 10 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
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/context_manager.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 analysis.server; 5 library analysis.server;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 import 'dart:math' show max; 9 import 'dart:math' show max;
10 10
(...skipping 356 matching lines...) Expand 10 before | Expand all | Expand 10 after
367 } 367 }
368 } 368 }
369 if (containingFolder != null) { 369 if (containingFolder != null) {
370 return folderMap[containingFolder]; 370 return folderMap[containingFolder];
371 } 371 }
372 Resource resource = resourceProvider.getResource(path); 372 Resource resource = resourceProvider.getResource(path);
373 if (resource is Folder) { 373 if (resource is Folder) {
374 return null; 374 return null;
375 } 375 }
376 // check if there is a context that analyzed this source 376 // check if there is a context that analyzed this source
377 return getAnalysisContextForSource(getSource(path)); 377 return getAnalysisContextForSource(_getSourceWithoutContext(path));
378 } 378 }
379 379
380 /** 380 /**
381 * Return any [AnalysisContext] that is analyzing the given [source], either 381 * Return any [AnalysisContext] that is analyzing the given [source], either
382 * explicitly or implicitly. Return `null` if there is no such context. 382 * explicitly or implicitly. Return `null` if there is no such context.
383 */ 383 */
384 AnalysisContext getAnalysisContextForSource(Source source) { 384 AnalysisContext getAnalysisContextForSource(Source source) {
385 for (AnalysisContext context in folderMap.values) { 385 for (AnalysisContext context in folderMap.values) {
386 SourceKind kind = context.getKindOf(source); 386 SourceKind kind = context.getKindOf(source);
387 if (kind != SourceKind.UNKNOWN) { 387 if (kind != SourceKind.UNKNOWN) {
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
490 // folderMap.values.forEach((ContextDirectory directory) { 490 // folderMap.values.forEach((ContextDirectory directory) {
491 // InternalAnalysisContext context = directory.context; 491 // InternalAnalysisContext context = directory.context;
492 // context.prioritySources.forEach((Source source) { 492 // context.prioritySources.forEach((Source source) {
493 // priorityFiles.add(source.fullName); 493 // priorityFiles.add(source.fullName);
494 // }); 494 // });
495 // }); 495 // });
496 // return priorityFiles; 496 // return priorityFiles;
497 // } 497 // }
498 498
499 /** 499 /**
500 * Returns resolved [CompilationUnit]s of the Dart file with the given [path].
501 *
502 * May be empty, but not `null`.
503 */
504 List<CompilationUnit> getResolvedCompilationUnits(String path) {
505 List<CompilationUnit> units = <CompilationUnit>[];
506 // prepare AnalysisContext
507 AnalysisContext context = getAnalysisContext(path);
508 if (context == null) {
509 return units;
510 }
511 // add a unit for each unit/library combination
512 Source unitSource = getSource(path);
513 List<Source> librarySources = context.getLibrariesContaining(unitSource);
514 for (Source librarySource in librarySources) {
515 CompilationUnit unit =
516 context.resolveCompilationUnit2(unitSource, librarySource);
517 if (unit != null) {
518 units.add(unit);
519 }
520 }
521 // done
522 return units;
523 }
524
525 /**
526 * Returns the [CompilationUnit] of the Dart file with the given [path] that 500 * Returns the [CompilationUnit] of the Dart file with the given [path] that
527 * should be used to resend notifications for already resolved unit. 501 * should be used to resend notifications for already resolved unit.
528 * Returns `null` if the file is not a part of any context, library has not 502 * Returns `null` if the file is not a part of any context, library has not
529 * been yet resolved, or any problem happened. 503 * been yet resolved, or any problem happened.
530 */ 504 */
531 CompilationUnit getResolvedCompilationUnitToResendNotification(String path) { 505 CompilationUnit getResolvedCompilationUnitToResendNotification(String path) {
532 // prepare AnalysisContext 506 // prepare AnalysisContext
533 AnalysisContext context = getAnalysisContext(path); 507 AnalysisContext context = getAnalysisContext(path);
534 if (context == null) { 508 if (context == null) {
535 return null; 509 return null;
536 } 510 }
537 // prepare sources 511 // prepare sources
538 Source unitSource = getSource(path); 512 Source unitSource = getSource(path);
539 List<Source> librarySources = context.getLibrariesContaining(unitSource); 513 List<Source> librarySources = context.getLibrariesContaining(unitSource);
540 if (librarySources.isEmpty) { 514 if (librarySources.isEmpty) {
541 return null; 515 return null;
542 } 516 }
543 // if library has not been resolved yet, the unit will be resolved later 517 // if library has not been resolved yet, the unit will be resolved later
544 Source librarySource = librarySources[0]; 518 Source librarySource = librarySources[0];
545 if (context.getLibraryElement(librarySource) == null) { 519 if (context.getLibraryElement(librarySource) == null) {
546 return null; 520 return null;
547 } 521 }
548 // if library has been already resolved, resolve unit 522 // if library has been already resolved, resolve unit
549 return context.resolveCompilationUnit2(unitSource, librarySource); 523 return context.resolveCompilationUnit2(unitSource, librarySource);
550 } 524 }
551 525
552 /** 526 /**
527 * Returns resolved [CompilationUnit]s of the Dart file with the given [path].
528 *
529 * May be empty, but not `null`.
530 */
531 List<CompilationUnit> getResolvedCompilationUnits(String path) {
532 List<CompilationUnit> units = <CompilationUnit>[];
533 // prepare AnalysisContext
534 AnalysisContext context = getAnalysisContext(path);
535 if (context == null) {
536 return units;
537 }
538 // add a unit for each unit/library combination
539 Source unitSource = getSource(path);
540 List<Source> librarySources = context.getLibrariesContaining(unitSource);
541 for (Source librarySource in librarySources) {
542 CompilationUnit unit =
543 context.resolveCompilationUnit2(unitSource, librarySource);
544 if (unit != null) {
545 units.add(unit);
546 }
547 }
548 // done
549 return units;
550 }
551
552 /**
553 * Return the [Source] of the Dart file with the given [path]. 553 * Return the [Source] of the Dart file with the given [path].
554 */ 554 */
555 Source getSource(String path) { 555 Source getSource(String path) {
556 // try SDK 556 // try SDK
557 { 557 {
558 Uri uri = resourceProvider.pathContext.toUri(path); 558 Uri uri = resourceProvider.pathContext.toUri(path);
559 Source sdkSource = defaultSdk.fromFileUri(uri); 559 Source sdkSource = defaultSdk.fromFileUri(uri);
560 if (sdkSource != null) { 560 if (sdkSource != null) {
561 return sdkSource; 561 return sdkSource;
562 } 562 }
563 } 563 }
564 // file-based source 564 // file-based source
565 File file = resourceProvider.getResource(path); 565 File file = resourceProvider.getResource(path);
566 return file.createSource(); 566 return ContextManager.createSourceInContext(getAnalysisContext(path), file);
567 } 567 }
568 568
569 /** 569 /**
570 * Handle a [request] that was read from the communication channel. 570 * Handle a [request] that was read from the communication channel.
571 */ 571 */
572 void handleRequest(Request request) { 572 void handleRequest(Request request) {
573 _performance.logRequest(request); 573 _performance.logRequest(request);
574 runZoned(() { 574 runZoned(() {
575 int count = handlers.length; 575 int count = handlers.length;
576 for (int i = 0; i < count; i++) { 576 for (int i = 0; i < count; i++) {
(...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after
1065 // 1065 //
1066 // Update the defaults used to create new contexts. 1066 // Update the defaults used to create new contexts.
1067 // 1067 //
1068 AnalysisOptionsImpl options = contextDirectoryManager.defaultOptions; 1068 AnalysisOptionsImpl options = contextDirectoryManager.defaultOptions;
1069 optionUpdaters.forEach((OptionUpdater optionUpdater) { 1069 optionUpdaters.forEach((OptionUpdater optionUpdater) {
1070 optionUpdater(options); 1070 optionUpdater(options);
1071 }); 1071 });
1072 } 1072 }
1073 1073
1074 /** 1074 /**
1075 * Return the [Source] of the Dart file with the given [path], assuming that
1076 * we do not know the context in which the path should be interpreted.
1077 */
1078 Source _getSourceWithoutContext(String path) {
1079 // try SDK
1080 {
1081 Uri uri = resourceProvider.pathContext.toUri(path);
1082 Source sdkSource = defaultSdk.fromFileUri(uri);
1083 if (sdkSource != null) {
1084 return sdkSource;
1085 }
1086 }
1087 // file-based source
1088 File file = resourceProvider.getResource(path);
1089 return file.createSource();
1090 }
1091
1092 /**
1075 * Schedules [performOperation] exection. 1093 * Schedules [performOperation] exection.
1076 */ 1094 */
1077 void _schedulePerformOperation() { 1095 void _schedulePerformOperation() {
1078 if (performOperationPending) { 1096 if (performOperationPending) {
1079 return; 1097 return;
1080 } 1098 }
1081 /* 1099 /*
1082 * TODO (danrubel) Rip out this workaround once the underlying problem 1100 * TODO (danrubel) Rip out this workaround once the underlying problem
1083 * is fixed. Currently, the VM and dart:io do not deliver content 1101 * is fixed. Currently, the VM and dart:io do not deliver content
1084 * on stdin in a timely manner if the event loop is busy. 1102 * on stdin in a timely manner if the event loop is busy.
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after
1329 * AnalysisServer.performOperation when the server is not idle. 1347 * AnalysisServer.performOperation when the server is not idle.
1330 */ 1348 */
1331 static PerformanceTag intertask = new PerformanceTag('intertask'); 1349 static PerformanceTag intertask = new PerformanceTag('intertask');
1332 1350
1333 /** 1351 /**
1334 * The [PerformanceTag] for time spent between calls to 1352 * The [PerformanceTag] for time spent between calls to
1335 * AnalysisServer.performOperation when the server is idle. 1353 * AnalysisServer.performOperation when the server is idle.
1336 */ 1354 */
1337 static PerformanceTag idle = new PerformanceTag('idle'); 1355 static PerformanceTag idle = new PerformanceTag('idle');
1338 } 1356 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/context_manager.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698