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 domain.analysis; | 5 library domain.analysis; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:core' hide Resource; | 8 import 'dart:core' hide Resource; |
9 | 9 |
10 import 'package:analysis_server/src/analysis_server.dart'; | 10 import 'package:analysis_server/src/analysis_server.dart'; |
11 import 'package:analysis_server/src/computer/computer_hover.dart'; | 11 import 'package:analysis_server/src/computer/computer_hover.dart'; |
| 12 import 'package:analysis_server/src/computer/computer_navigation.dart'; |
12 import 'package:analysis_server/src/constants.dart'; | 13 import 'package:analysis_server/src/constants.dart'; |
13 import 'package:analysis_server/src/protocol_server.dart'; | 14 import 'package:analysis_server/src/protocol_server.dart'; |
14 import 'package:analysis_server/src/services/dependencies/library_dependencies.d
art'; | 15 import 'package:analysis_server/src/services/dependencies/library_dependencies.d
art'; |
15 import 'package:analyzer/file_system/file_system.dart'; | 16 import 'package:analyzer/file_system/file_system.dart'; |
16 import 'package:analyzer/src/generated/ast.dart'; | 17 import 'package:analyzer/src/generated/ast.dart'; |
17 import 'package:analyzer/src/generated/engine.dart' as engine; | 18 import 'package:analyzer/src/generated/engine.dart' as engine; |
18 | 19 |
19 /** | 20 /** |
20 * Instances of the class [AnalysisDomainHandler] implement a [RequestHandler] | 21 * Instances of the class [AnalysisDomainHandler] implement a [RequestHandler] |
21 * that handles requests in the `analysis` domain. | 22 * that handles requests in the `analysis` domain. |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
98 Map<String, Map<String, List<String>>> packageMap = | 99 Map<String, Map<String, List<String>>> packageMap = |
99 collector.calculatePackageMap(server.folderMap); | 100 collector.calculatePackageMap(server.folderMap); |
100 server.sendResponse(new AnalysisGetLibraryDependenciesResult( | 101 server.sendResponse(new AnalysisGetLibraryDependenciesResult( |
101 libraries.toList(growable: false), packageMap) | 102 libraries.toList(growable: false), packageMap) |
102 .toResponse(request.id)); | 103 .toResponse(request.id)); |
103 }); | 104 }); |
104 // delay response | 105 // delay response |
105 return Response.DELAYED_RESPONSE; | 106 return Response.DELAYED_RESPONSE; |
106 } | 107 } |
107 | 108 |
| 109 /** |
| 110 * Implement the `analysis.getNavigation` request. |
| 111 */ |
| 112 Response getNavigation(Request request) { |
| 113 var params = new AnalysisGetNavigationParams.fromRequest(request); |
| 114 String file = params.file; |
| 115 int offset = params.offset; |
| 116 Future<AnalysisDoneReason> completionFuture = |
| 117 server.onFileAnalysisComplete(file); |
| 118 if (completionFuture == null) { |
| 119 return new Response.getNavigationInvalidFile(request); |
| 120 } |
| 121 completionFuture.then((AnalysisDoneReason reason) { |
| 122 switch (reason) { |
| 123 case AnalysisDoneReason.COMPLETE: |
| 124 List<CompilationUnit> units = |
| 125 server.getResolvedCompilationUnits(file); |
| 126 if (units.isEmpty) { |
| 127 server.sendResponse(new Response.getNavigationInvalidFile(request)); |
| 128 } else { |
| 129 DartUnitNavigationComputer computer = |
| 130 new DartUnitNavigationComputer(); |
| 131 for (CompilationUnit unit in units) { |
| 132 AstNode node = new NodeLocator(offset).searchWithin(unit); |
| 133 if (node != null) { |
| 134 computer.compute(node); |
| 135 } |
| 136 } |
| 137 server.sendResponse(new AnalysisGetNavigationResult( |
| 138 computer.files, computer.targets, computer.regions) |
| 139 .toResponse(request.id)); |
| 140 } |
| 141 break; |
| 142 case AnalysisDoneReason.CONTEXT_REMOVED: |
| 143 // The active contexts have changed, so try again. |
| 144 Response response = getNavigation(request); |
| 145 if (response != Response.DELAYED_RESPONSE) { |
| 146 server.sendResponse(response); |
| 147 } |
| 148 break; |
| 149 } |
| 150 }); |
| 151 // delay response |
| 152 return Response.DELAYED_RESPONSE; |
| 153 } |
| 154 |
108 @override | 155 @override |
109 Response handleRequest(Request request) { | 156 Response handleRequest(Request request) { |
110 try { | 157 try { |
111 String requestName = request.method; | 158 String requestName = request.method; |
112 if (requestName == ANALYSIS_GET_ERRORS) { | 159 if (requestName == ANALYSIS_GET_ERRORS) { |
113 return getErrors(request); | 160 return getErrors(request); |
114 } else if (requestName == ANALYSIS_GET_HOVER) { | 161 } else if (requestName == ANALYSIS_GET_HOVER) { |
115 return getHover(request); | 162 return getHover(request); |
116 } else if (requestName == ANALYSIS_GET_LIBRARY_DEPENDENCIES) { | 163 } else if (requestName == ANALYSIS_GET_LIBRARY_DEPENDENCIES) { |
117 return getLibraryDependencies(request); | 164 return getLibraryDependencies(request); |
| 165 } else if (requestName == ANALYSIS_GET_NAVIGATION) { |
| 166 return getNavigation(request); |
118 } else if (requestName == ANALYSIS_REANALYZE) { | 167 } else if (requestName == ANALYSIS_REANALYZE) { |
119 return reanalyze(request); | 168 return reanalyze(request); |
120 } else if (requestName == ANALYSIS_SET_ANALYSIS_ROOTS) { | 169 } else if (requestName == ANALYSIS_SET_ANALYSIS_ROOTS) { |
121 return setAnalysisRoots(request); | 170 return setAnalysisRoots(request); |
122 } else if (requestName == ANALYSIS_SET_PRIORITY_FILES) { | 171 } else if (requestName == ANALYSIS_SET_PRIORITY_FILES) { |
123 return setPriorityFiles(request); | 172 return setPriorityFiles(request); |
124 } else if (requestName == ANALYSIS_SET_SUBSCRIPTIONS) { | 173 } else if (requestName == ANALYSIS_SET_SUBSCRIPTIONS) { |
125 return setSubscriptions(request); | 174 return setSubscriptions(request); |
126 } else if (requestName == ANALYSIS_UPDATE_CONTENT) { | 175 } else if (requestName == ANALYSIS_UPDATE_CONTENT) { |
127 return updateContent(request); | 176 return updateContent(request); |
(...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
224 } | 273 } |
225 if (newOptions.generateLints != null) { | 274 if (newOptions.generateLints != null) { |
226 updaters.add((engine.AnalysisOptionsImpl options) { | 275 updaters.add((engine.AnalysisOptionsImpl options) { |
227 options.lint = newOptions.generateLints; | 276 options.lint = newOptions.generateLints; |
228 }); | 277 }); |
229 } | 278 } |
230 server.updateOptions(updaters); | 279 server.updateOptions(updaters); |
231 return new AnalysisUpdateOptionsResult().toResponse(request.id); | 280 return new AnalysisUpdateOptionsResult().toResponse(request.id); |
232 } | 281 } |
233 } | 282 } |
OLD | NEW |