| 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/channel.dart'; | 12 import 'package:analysis_server/src/channel/channel.dart'; |
| 13 import 'package:analysis_server/src/context_manager.dart'; | 13 import 'package:analysis_server/src/context_manager.dart'; |
| 14 import 'package:analysis_server/src/operation/operation_analysis.dart'; | 14 import 'package:analysis_server/src/operation/operation_analysis.dart'; |
| 15 import 'package:analysis_server/src/operation/operation.dart'; | 15 import 'package:analysis_server/src/operation/operation.dart'; |
| 16 import 'package:analysis_server/src/operation/operation_queue.dart'; | 16 import 'package:analysis_server/src/operation/operation_queue.dart'; |
| 17 import 'package:analysis_server/src/protocol.dart' hide Element; | 17 import 'package:analysis_server/src/protocol.dart' hide Element; |
| 18 import 'package:analyzer/source/package_map_provider.dart'; | 18 import 'package:analyzer/source/package_map_provider.dart'; |
| 19 import 'package:analyzer/source/package_map_resolver.dart'; | |
| 20 import 'package:analyzer/src/generated/ast.dart'; | 19 import 'package:analyzer/src/generated/ast.dart'; |
| 21 import 'package:analyzer/src/generated/engine.dart'; | 20 import 'package:analyzer/src/generated/engine.dart'; |
| 22 import 'package:analyzer/src/generated/source.dart'; | 21 import 'package:analyzer/src/generated/source.dart'; |
| 23 import 'package:analyzer/src/generated/sdk.dart'; | 22 import 'package:analyzer/src/generated/sdk.dart'; |
| 24 import 'package:analyzer/src/generated/source_io.dart'; | 23 import 'package:analyzer/src/generated/source_io.dart'; |
| 25 import 'package:analyzer/src/generated/java_engine.dart'; | 24 import 'package:analyzer/src/generated/java_engine.dart'; |
| 26 import 'package:analysis_server/src/services/index/index.dart'; | 25 import 'package:analysis_server/src/services/index/index.dart'; |
| 27 import 'package:analysis_server/src/services/search/search_engine.dart'; | 26 import 'package:analysis_server/src/services/search/search_engine.dart'; |
| 28 import 'package:analyzer/src/generated/element.dart'; | 27 import 'package:analyzer/src/generated/element.dart'; |
| 29 import 'package:analysis_server/src/services/correction/namespace.dart'; | 28 import 'package:analysis_server/src/services/correction/namespace.dart'; |
| 30 | 29 |
| 31 | 30 |
| 32 class ServerContextManager extends ContextManager { | 31 class ServerContextManager extends ContextManager { |
| 33 final AnalysisServer analysisServer; | 32 final AnalysisServer analysisServer; |
| 34 | 33 |
| 35 /** | 34 /** |
| 36 * The default options used to create new analysis contexts. | 35 * The default options used to create new analysis contexts. |
| 37 */ | 36 */ |
| 38 AnalysisOptionsImpl defaultOptions = new AnalysisOptionsImpl(); | 37 AnalysisOptionsImpl defaultOptions = new AnalysisOptionsImpl(); |
| 39 | 38 |
| 40 ServerContextManager(this.analysisServer, ResourceProvider resourceProvider, | 39 ServerContextManager(this.analysisServer, ResourceProvider resourceProvider, |
| 41 PackageMapProvider packageMapProvider) | 40 PackageMapProvider packageMapProvider) |
| 42 : super(resourceProvider, packageMapProvider); | 41 : super(resourceProvider, packageMapProvider); |
| 43 | 42 |
| 44 @override | 43 @override |
| 45 void addContext(Folder folder, Map<String, List<Folder>> packageMap) { | 44 void addContext(Folder folder, UriResolver packageUriResolver) { |
| 46 AnalysisContext context = AnalysisEngine.instance.createAnalysisContext(); | 45 AnalysisContext context = AnalysisEngine.instance.createAnalysisContext(); |
| 47 analysisServer.folderMap[folder] = context; | 46 analysisServer.folderMap[folder] = context; |
| 48 context.sourceFactory = _createSourceFactory(packageMap); | 47 context.sourceFactory = _createSourceFactory(packageUriResolver); |
| 49 context.analysisOptions = new AnalysisOptionsImpl.con1(defaultOptions); | 48 context.analysisOptions = new AnalysisOptionsImpl.con1(defaultOptions); |
| 50 analysisServer.schedulePerformAnalysisOperation(context); | 49 analysisServer.schedulePerformAnalysisOperation(context); |
| 51 } | 50 } |
| 52 | 51 |
| 53 @override | 52 @override |
| 54 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet) { | 53 void applyChangesToContext(Folder contextFolder, ChangeSet changeSet) { |
| 55 AnalysisContext context = analysisServer.folderMap[contextFolder]; | 54 AnalysisContext context = analysisServer.folderMap[contextFolder]; |
| 56 if (context != null) { | 55 if (context != null) { |
| 57 context.applyChanges(changeSet); | 56 context.applyChanges(changeSet); |
| 58 analysisServer.schedulePerformAnalysisOperation(context); | 57 analysisServer.schedulePerformAnalysisOperation(context); |
| 59 } | 58 } |
| 60 } | 59 } |
| 61 | 60 |
| 62 @override | 61 @override |
| 63 void removeContext(Folder folder) { | 62 void removeContext(Folder folder) { |
| 64 AnalysisContext context = analysisServer.folderMap.remove(folder); | 63 AnalysisContext context = analysisServer.folderMap.remove(folder); |
| 65 if (analysisServer.index != null) { | 64 if (analysisServer.index != null) { |
| 66 analysisServer.index.removeContext(context); | 65 analysisServer.index.removeContext(context); |
| 67 } | 66 } |
| 68 analysisServer.sendContextAnalysisDoneNotifications( | 67 analysisServer.sendContextAnalysisDoneNotifications( |
| 69 context, | 68 context, |
| 70 AnalysisDoneReason.CONTEXT_REMOVED); | 69 AnalysisDoneReason.CONTEXT_REMOVED); |
| 71 } | 70 } |
| 72 | 71 |
| 73 @override | 72 @override |
| 74 void updateContextPackageMap(Folder contextFolder, Map<String, | 73 void updateContextPackageUriResolver(Folder contextFolder, |
| 75 List<Folder>> packageMap) { | 74 UriResolver packageUriResolver) { |
| 76 AnalysisContext context = analysisServer.folderMap[contextFolder]; | 75 AnalysisContext context = analysisServer.folderMap[contextFolder]; |
| 77 context.sourceFactory = _createSourceFactory(packageMap); | 76 context.sourceFactory = _createSourceFactory(packageUriResolver); |
| 78 analysisServer.schedulePerformAnalysisOperation(context); | 77 analysisServer.schedulePerformAnalysisOperation(context); |
| 79 } | 78 } |
| 80 | 79 |
| 81 /** | 80 /** |
| 82 * Set up a [SourceFactory] that resolves packages using the given | 81 * Set up a [SourceFactory] that resolves packages using the given |
| 83 * [packageMap]. | 82 * [packageUriResolver]. |
| 84 */ | 83 */ |
| 85 SourceFactory _createSourceFactory(Map<String, List<Folder>> packageMap) { | 84 SourceFactory _createSourceFactory(UriResolver packageUriResolver) { |
| 86 List<UriResolver> resolvers = <UriResolver>[ | 85 List<UriResolver> resolvers = <UriResolver>[ |
| 87 new DartUriResolver(analysisServer.defaultSdk), | 86 new DartUriResolver(analysisServer.defaultSdk), |
| 88 new ResourceUriResolver(resourceProvider), | 87 new ResourceUriResolver(resourceProvider), |
| 89 new PackageMapUriResolver(resourceProvider, packageMap)]; | 88 packageUriResolver]; |
| 90 return new SourceFactory(resolvers); | 89 return new SourceFactory(resolvers); |
| 91 } | 90 } |
| 92 } | 91 } |
| 93 | 92 |
| 94 | 93 |
| 95 /** | 94 /** |
| 96 * Enum representing reasons why analysis might be done for a given file. | 95 * Enum representing reasons why analysis might be done for a given file. |
| 97 */ | 96 */ |
| 98 class AnalysisDoneReason { | 97 class AnalysisDoneReason { |
| 99 /** | 98 /** |
| (...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 936 // send the notification | 935 // send the notification |
| 937 channel.sendNotification( | 936 channel.sendNotification( |
| 938 new ServerErrorParams( | 937 new ServerErrorParams( |
| 939 true, | 938 true, |
| 940 exceptionString, | 939 exceptionString, |
| 941 stackTraceString).toNotification()); | 940 stackTraceString).toNotification()); |
| 942 } | 941 } |
| 943 } | 942 } |
| 944 | 943 |
| 945 typedef void OptionUpdater(AnalysisOptionsImpl options); | 944 typedef void OptionUpdater(AnalysisOptionsImpl options); |
| OLD | NEW |