Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(56)

Side by Side Diff: pkg/analysis_server/lib/src/domain_analysis.dart

Issue 2582753003: Fix analysis.getNavigation with the new analysis driver. (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698