| 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'; | 8 import 'dart:core'; |
| 9 | 9 |
| 10 import 'package:analysis_server/plugin/analysis/analysis_domain.dart'; | 10 import 'package:analysis_server/plugin/analysis/analysis_domain.dart'; |
| 11 import 'package:analysis_server/src/analysis_server.dart'; | 11 import 'package:analysis_server/src/analysis_server.dart'; |
| 12 import 'package:analysis_server/src/computer/computer_hover.dart'; | 12 import 'package:analysis_server/src/computer/computer_hover.dart'; |
| 13 import 'package:analysis_server/src/constants.dart'; | 13 import 'package:analysis_server/src/constants.dart'; |
| 14 import 'package:analysis_server/src/context_manager.dart'; | 14 import 'package:analysis_server/src/context_manager.dart'; |
| 15 import 'package:analysis_server/src/domains/analysis/navigation.dart'; | 15 import 'package:analysis_server/src/domains/analysis/navigation.dart'; |
| 16 import 'package:analysis_server/src/domains/analysis/navigation_dart.dart'; |
| 16 import 'package:analysis_server/src/operation/operation_analysis.dart' | 17 import 'package:analysis_server/src/operation/operation_analysis.dart' |
| 17 show NavigationOperation, OccurrencesOperation; | 18 show NavigationOperation, OccurrencesOperation; |
| 18 import 'package:analysis_server/src/protocol/protocol_internal.dart'; | 19 import 'package:analysis_server/src/protocol/protocol_internal.dart'; |
| 19 import 'package:analysis_server/src/protocol_server.dart'; | 20 import 'package:analysis_server/src/protocol_server.dart'; |
| 20 import 'package:analysis_server/src/services/dependencies/library_dependencies.d
art'; | 21 import 'package:analysis_server/src/services/dependencies/library_dependencies.d
art'; |
| 21 import 'package:analysis_server/src/services/dependencies/reachable_source_colle
ctor.dart'; | 22 import 'package:analysis_server/src/services/dependencies/reachable_source_colle
ctor.dart'; |
| 22 import 'package:analyzer/dart/ast/ast.dart'; | 23 import 'package:analyzer/dart/ast/ast.dart'; |
| 23 import 'package:analyzer/dart/element/element.dart'; | 24 import 'package:analyzer/dart/element/element.dart'; |
| 24 import 'package:analyzer/error/error.dart' as engine; | 25 import 'package:analyzer/error/error.dart' as engine; |
| 25 import 'package:analyzer/exception/exception.dart'; | 26 import 'package:analyzer/exception/exception.dart'; |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 return Response.DELAYED_RESPONSE; | 141 return Response.DELAYED_RESPONSE; |
| 141 } | 142 } |
| 142 | 143 |
| 143 /** | 144 /** |
| 144 * Implement the `analysis.getNavigation` request. | 145 * Implement the `analysis.getNavigation` request. |
| 145 */ | 146 */ |
| 146 Future<Null> getNavigation(Request request) async { | 147 Future<Null> getNavigation(Request request) async { |
| 147 var params = new AnalysisGetNavigationParams.fromRequest(request); | 148 var params = new AnalysisGetNavigationParams.fromRequest(request); |
| 148 String file = params.file; | 149 String file = params.file; |
| 149 | 150 |
| 150 void send(CompilationUnit unit) { | 151 if (server.options.enableNewAnalysisDriver) { |
| 151 if (unit == null) { | 152 AnalysisDriver driver = server.getContainingDriver(file); |
| 153 if (driver == null) { |
| 152 server.sendResponse(new Response.getNavigationInvalidFile(request)); | 154 server.sendResponse(new Response.getNavigationInvalidFile(request)); |
| 153 } else { | 155 } else { |
| 154 CompilationUnitElement unitElement = unit.element; | 156 AnalysisResult result = await server.getAnalysisResult(file); |
| 155 NavigationCollectorImpl collector = computeNavigation( | 157 CompilationUnit unit = result?.unit; |
| 156 server, | 158 if (unit == null || !result.exists) { |
| 157 unitElement.context, | 159 server.sendResponse(new Response.getNavigationInvalidFile(request)); |
| 158 unitElement.source, | 160 } else { |
| 159 params.offset, | 161 NavigationCollectorImpl collector = new NavigationCollectorImpl(); |
| 160 params.length); | 162 computeDartNavigation(collector, unit, params.offset, params.length); |
| 161 server.sendResponse(new AnalysisGetNavigationResult( | 163 collector.createRegions(); |
| 162 collector.files, collector.targets, collector.regions) | 164 server.sendResponse(new AnalysisGetNavigationResult( |
| 163 .toResponse(request.id)); | 165 collector.files, collector.targets, collector.regions) |
| 166 .toResponse(request.id)); |
| 167 } |
| 164 } | 168 } |
| 165 } | |
| 166 | |
| 167 if (server.options.enableNewAnalysisDriver) { | |
| 168 AnalysisResult result = await server.getAnalysisResult(file); | |
| 169 send(result?.unit); | |
| 170 return; | 169 return; |
| 171 } | 170 } |
| 172 | 171 |
| 173 Future<AnalysisDoneReason> analysisFuture = | 172 Future<AnalysisDoneReason> analysisFuture = |
| 174 server.onFileAnalysisComplete(file); | 173 server.onFileAnalysisComplete(file); |
| 175 if (analysisFuture == null) { | 174 if (analysisFuture == null) { |
| 176 server.sendResponse(new Response.getNavigationInvalidFile(request)); | 175 server.sendResponse(new Response.getNavigationInvalidFile(request)); |
| 177 } | 176 } |
| 178 analysisFuture.then((AnalysisDoneReason reason) async { | 177 analysisFuture.then((AnalysisDoneReason reason) async { |
| 179 switch (reason) { | 178 switch (reason) { |
| 180 case AnalysisDoneReason.COMPLETE: | 179 case AnalysisDoneReason.COMPLETE: |
| 181 CompilationUnit unit = await server.getResolvedCompilationUnit(file); | 180 CompilationUnit unit = await server.getResolvedCompilationUnit(file); |
| 182 send(unit); | 181 if (unit == null) { |
| 182 server.sendResponse(new Response.getNavigationInvalidFile(request)); |
| 183 } else { |
| 184 CompilationUnitElement unitElement = unit.element; |
| 185 NavigationCollectorImpl collector = computeNavigation( |
| 186 server, |
| 187 unitElement.context, |
| 188 unitElement.source, |
| 189 params.offset, |
| 190 params.length); |
| 191 server.sendResponse(new AnalysisGetNavigationResult( |
| 192 collector.files, collector.targets, collector.regions) |
| 193 .toResponse(request.id)); |
| 194 } |
| 183 break; | 195 break; |
| 184 case AnalysisDoneReason.CONTEXT_REMOVED: | 196 case AnalysisDoneReason.CONTEXT_REMOVED: |
| 185 // The active contexts have changed, so try again. | 197 // The active contexts have changed, so try again. |
| 186 await getNavigation(request); | 198 await getNavigation(request); |
| 187 break; | 199 break; |
| 188 } | 200 } |
| 189 }); | 201 }); |
| 190 } | 202 } |
| 191 | 203 |
| 192 /** | 204 /** |
| (...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 context.onResultChanged(descriptor).listen((result) { | 440 context.onResultChanged(descriptor).listen((result) { |
| 429 StreamController<engine.ResultChangedEvent> controller = | 441 StreamController<engine.ResultChangedEvent> controller = |
| 430 controllers[result.descriptor]; | 442 controllers[result.descriptor]; |
| 431 if (controller != null) { | 443 if (controller != null) { |
| 432 controller.add(result); | 444 controller.add(result); |
| 433 } | 445 } |
| 434 }); | 446 }); |
| 435 } | 447 } |
| 436 } | 448 } |
| 437 } | 449 } |
| OLD | NEW |