| 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 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 | 9 |
| 10 import 'package:analyzer/file_system/file_system.dart'; | 10 import 'package:analyzer/file_system/file_system.dart'; |
| 11 import 'package:analysis_server/src/analysis_logger.dart'; | 11 import 'package:analysis_server/src/analysis_logger.dart'; |
| 12 import 'package:analysis_server/src/channel.dart'; | 12 import 'package:analysis_server/src/channel.dart'; |
| 13 import 'package:analysis_server/src/constants.dart'; | 13 import 'package:analysis_server/src/constants.dart'; |
| 14 import 'package:analysis_server/src/context_directory_manager.dart'; | 14 import 'package:analysis_server/src/context_directory_manager.dart'; |
| 15 import 'package:analysis_server/src/domain_analysis.dart'; | 15 import 'package:analysis_server/src/domain_analysis.dart'; |
| 16 import 'package:analysis_server/src/operation/operation_analysis.dart'; | 16 import 'package:analysis_server/src/operation/operation_analysis.dart'; |
| 17 import 'package:analysis_server/src/operation/operation.dart'; | 17 import 'package:analysis_server/src/operation/operation.dart'; |
| 18 import 'package:analysis_server/src/operation/operation_queue.dart'; | 18 import 'package:analysis_server/src/operation/operation_queue.dart'; |
| 19 import 'package:analysis_server/src/package_map_provider.dart'; | 19 import 'package:analysis_server/src/package_map_provider.dart'; |
| 20 import 'package:analysis_server/src/protocol.dart'; | 20 import 'package:analysis_server/src/protocol.dart'; |
| 21 import 'package:analyzer/source/package_map_resolver.dart'; | 21 import 'package:analyzer/source/package_map_resolver.dart'; |
| 22 import 'package:analyzer/src/generated/ast.dart'; | 22 import 'package:analyzer/src/generated/ast.dart'; |
| 23 import 'package:analyzer/src/generated/engine.dart'; | 23 import 'package:analyzer/src/generated/engine.dart'; |
| 24 import 'package:analyzer/src/generated/error.dart'; | |
| 25 import 'package:analyzer/src/generated/source.dart'; | 24 import 'package:analyzer/src/generated/source.dart'; |
| 26 import 'package:analyzer/src/generated/sdk.dart'; | 25 import 'package:analyzer/src/generated/sdk.dart'; |
| 27 import 'package:analyzer/src/generated/source_io.dart'; | 26 import 'package:analyzer/src/generated/source_io.dart'; |
| 28 import 'package:analyzer/src/generated/java_engine.dart'; | 27 import 'package:analyzer/src/generated/java_engine.dart'; |
| 29 import 'package:analysis_services/constants.dart'; | 28 import 'package:analysis_services/constants.dart'; |
| 30 import 'package:analysis_services/index/index.dart'; | 29 import 'package:analysis_services/index/index.dart'; |
| 31 import 'package:analysis_services/search/search_engine.dart'; | 30 import 'package:analysis_services/search/search_engine.dart'; |
| 32 import 'package:analyzer/src/generated/element.dart'; | 31 import 'package:analyzer/src/generated/element.dart'; |
| 33 | 32 |
| 34 | 33 |
| (...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 | 363 |
| 365 /** | 364 /** |
| 366 * Returns `true` if there is a subscription for the given [server] and [file]
. | 365 * Returns `true` if there is a subscription for the given [server] and [file]
. |
| 367 */ | 366 */ |
| 368 bool hasAnalysisSubscription(AnalysisService service, String file) { | 367 bool hasAnalysisSubscription(AnalysisService service, String file) { |
| 369 Set<String> files = analysisServices[service]; | 368 Set<String> files = analysisServices[service]; |
| 370 return files != null && files.contains(file); | 369 return files != null && files.contains(file); |
| 371 } | 370 } |
| 372 | 371 |
| 373 /** | 372 /** |
| 373 * Returns `true` if errors should be reported for [file] with the given |
| 374 * absolute path. |
| 375 */ |
| 376 bool shouldSendErrorsNotificationFor(String file) { |
| 377 // TODO(scheglov) add support for the "--no-error-notification" flag. |
| 378 return contextDirectoryManager.isInAnalysisRoot(file); |
| 379 } |
| 380 |
| 381 /** |
| 374 * Returns `true` if the given [AnalysisContext] is a priority one. | 382 * Returns `true` if the given [AnalysisContext] is a priority one. |
| 375 */ | 383 */ |
| 376 bool isPriorityContext(AnalysisContext context) { | 384 bool isPriorityContext(AnalysisContext context) { |
| 377 // TODO(scheglov) implement support for priority sources/contexts | 385 // TODO(scheglov) implement support for priority sources/contexts |
| 378 return false; | 386 return false; |
| 379 } | 387 } |
| 380 | 388 |
| 381 /** | 389 /** |
| 382 * Perform the next available [ServerOperation]. | 390 * Perform the next available [ServerOperation]. |
| 383 */ | 391 */ |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 486 subscriptions.forEach((service, Set<String> newFiles) { | 494 subscriptions.forEach((service, Set<String> newFiles) { |
| 487 Set<String> oldFiles = analysisServices[service]; | 495 Set<String> oldFiles = analysisServices[service]; |
| 488 Set<String> todoFiles = oldFiles != null ? newFiles.difference(oldFiles) :
newFiles; | 496 Set<String> todoFiles = oldFiles != null ? newFiles.difference(oldFiles) :
newFiles; |
| 489 for (String file in todoFiles) { | 497 for (String file in todoFiles) { |
| 490 Source source = getSource(file); | 498 Source source = getSource(file); |
| 491 // prepare context | 499 // prepare context |
| 492 AnalysisContext context = getAnalysisContext(file); | 500 AnalysisContext context = getAnalysisContext(file); |
| 493 if (context == null) { | 501 if (context == null) { |
| 494 continue; | 502 continue; |
| 495 } | 503 } |
| 496 // errors | |
| 497 if (service == AnalysisService.ERRORS) { | |
| 498 LineInfo lineInfo = context.getLineInfo(source); | |
| 499 if (lineInfo != null) { | |
| 500 List<AnalysisError> errors = context.getErrors(source).errors; | |
| 501 sendAnalysisNotificationErrors(this, file, lineInfo, errors); | |
| 502 } | |
| 503 } | |
| 504 // Dart unit notifications. | 504 // Dart unit notifications. |
| 505 if (AnalysisEngine.isDartFileName(file)) { | 505 if (AnalysisEngine.isDartFileName(file)) { |
| 506 CompilationUnit dartUnit = getResolvedCompilationUnitToResendNotificat
ion(file); | 506 CompilationUnit dartUnit = getResolvedCompilationUnitToResendNotificat
ion(file); |
| 507 if (dartUnit != null) { | 507 if (dartUnit != null) { |
| 508 switch (service) { | 508 switch (service) { |
| 509 case AnalysisService.HIGHLIGHTS: | 509 case AnalysisService.HIGHLIGHTS: |
| 510 sendAnalysisNotificationHighlights(this, file, dartUnit); | 510 sendAnalysisNotificationHighlights(this, file, dartUnit); |
| 511 break; | 511 break; |
| 512 case AnalysisService.NAVIGATION: | 512 case AnalysisService.NAVIGATION: |
| 513 // TODO(scheglov) consider support for one unit in 2+ libraries | 513 // TODO(scheglov) consider support for one unit in 2+ libraries |
| (...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 notification.setParameter(STACK_TRACE, stackTraceString); | 765 notification.setParameter(STACK_TRACE, stackTraceString); |
| 766 channel.sendNotification(notification); | 766 channel.sendNotification(notification); |
| 767 } | 767 } |
| 768 } | 768 } |
| 769 | 769 |
| 770 | 770 |
| 771 /** | 771 /** |
| 772 * An enumeration of the services provided by the analysis domain. | 772 * An enumeration of the services provided by the analysis domain. |
| 773 */ | 773 */ |
| 774 class AnalysisService extends Enum2<AnalysisService> { | 774 class AnalysisService extends Enum2<AnalysisService> { |
| 775 static const ERRORS = const AnalysisService('ERRORS', 0); | |
| 776 static const HIGHLIGHTS = const AnalysisService('HIGHLIGHTS', 1); | 775 static const HIGHLIGHTS = const AnalysisService('HIGHLIGHTS', 1); |
| 777 static const NAVIGATION = const AnalysisService('NAVIGATION', 2); | 776 static const NAVIGATION = const AnalysisService('NAVIGATION', 2); |
| 778 static const OCCURRENCES = const AnalysisService('OCCURRENCES', 3); | 777 static const OCCURRENCES = const AnalysisService('OCCURRENCES', 3); |
| 779 static const OUTLINE = const AnalysisService('OUTLINE', 4); | 778 static const OUTLINE = const AnalysisService('OUTLINE', 4); |
| 780 static const OVERRIDES = const AnalysisService('OVERRIDES', 5); | 779 static const OVERRIDES = const AnalysisService('OVERRIDES', 5); |
| 781 | 780 |
| 782 static const List<AnalysisService> VALUES = | 781 static const List<AnalysisService> VALUES = |
| 783 const [ERRORS, HIGHLIGHTS, NAVIGATION, OCCURRENCES, OUTLINE, OVERRIDES]; | 782 const [HIGHLIGHTS, NAVIGATION, OCCURRENCES, OUTLINE, OVERRIDES]; |
| 784 | 783 |
| 785 const AnalysisService(String name, int ordinal) : super(name, ordinal); | 784 const AnalysisService(String name, int ordinal) : super(name, ordinal); |
| 786 } | 785 } |
| 787 | 786 |
| 788 | 787 |
| 789 typedef void OptionUpdater(AnalysisOptionsImpl options); | 788 typedef void OptionUpdater(AnalysisOptionsImpl options); |
| 790 | 789 |
| 791 /** | 790 /** |
| 792 * An enumeration of the services provided by the server domain. | 791 * An enumeration of the services provided by the server domain. |
| 793 */ | 792 */ |
| 794 class ServerService extends Enum2<ServerService> { | 793 class ServerService extends Enum2<ServerService> { |
| 795 static const ServerService STATUS = const ServerService('STATUS', 0); | 794 static const ServerService STATUS = const ServerService('STATUS', 0); |
| 796 | 795 |
| 797 static const List<ServerService> VALUES = const [STATUS]; | 796 static const List<ServerService> VALUES = const [STATUS]; |
| 798 | 797 |
| 799 const ServerService(String name, int ordinal) : super(name, ordinal); | 798 const ServerService(String name, int ordinal) : super(name, ordinal); |
| 800 } | 799 } |
| OLD | NEW |