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 |