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

Unified Diff: pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart

Issue 2478963002: Completion with the new analysis driver. (Closed)
Patch Set: Fixes for review comments. Created 4 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
index ef95f10bb4d7d4474d1a80a5becca66824c450fa..069b07196d7a2988399a2957ddf8f7ef943df1b8 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/completion_manager.dart
@@ -25,8 +25,9 @@ import 'package:analyzer/dart/element/type.dart';
import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/context/context.dart' show AnalysisFutureHelper;
+import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/ast/token.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/engine.dart' hide AnalysisResult;
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/task/dart.dart';
import 'package:analyzer/task/dart.dart';
@@ -106,6 +107,9 @@ class DartCompletionManager implements CompletionContributor {
*/
class DartCompletionRequestImpl implements DartCompletionRequest {
@override
+ final AnalysisResult result;
+
+ @override
final AnalysisContext context;
@override
@@ -158,6 +162,7 @@ class DartCompletionRequestImpl implements DartCompletionRequest {
final CompletionPerformance performance;
DartCompletionRequestImpl._(
+ this.result,
this.context,
this.resourceProvider,
this.searchEngine,
@@ -254,12 +259,17 @@ class DartCompletionRequestImpl implements DartCompletionRequest {
// Resolve declarations in the target unit
// TODO(danrubel) resolve the expression or containing method
// rather than the entire compilation unit
- CompilationUnit resolvedUnit = await _computeAsync(
- this,
- new LibrarySpecificUnit(librarySource, source),
- RESOLVED_UNIT,
- performance,
- 'resolve expression');
+ CompilationUnit resolvedUnit;
+ if (result != null) {
+ resolvedUnit = result.unit;
+ } else {
+ resolvedUnit = await _computeAsync(
+ this,
+ new LibrarySpecificUnit(librarySource, source),
+ RESOLVED_UNIT,
+ performance,
+ 'resolve expression');
+ }
// TODO(danrubel) determine if the underlying source has been modified
// in a way that invalidates the completion request
@@ -302,6 +312,10 @@ class DartCompletionRequestImpl implements DartCompletionRequest {
if (_resolvedUnits != null) {
return _resolvedUnits;
}
+ if (result != null) {
+ _resolvedUnits = result.unit.element.library.units;
+ return _resolvedUnits;
+ }
LibraryElement libElem = libraryElement;
if (libElem == null) {
return null;
@@ -365,35 +379,43 @@ class DartCompletionRequestImpl implements DartCompletionRequest {
const BUILD_REQUEST_TAG = 'build DartCompletionRequest';
performance.logStartTime(BUILD_REQUEST_TAG);
- Source source = request.source;
- AnalysisContext context = request.context;
-
- const PARSE_TAG = 'parse unit';
- performance.logStartTime(PARSE_TAG);
- CompilationUnit unit = request.context.computeResult(source, PARSED_UNIT);
- performance.logElapseTime(PARSE_TAG);
-
Source libSource;
- if (unit.directives.any((d) => d is PartOfDirective)) {
- List<Source> libraries = context.getLibrariesContaining(source);
- if (libraries.isNotEmpty) {
- libSource = libraries[0];
- }
+ CompilationUnit unit;
+ if (request.context == null) {
+ unit = request.result.unit;
+ // TODO(scheglov) support for parts
+ libSource = unit.element.source;
} else {
- libSource = source;
- }
+ Source source = request.source;
+ AnalysisContext context = request.context;
+
+ const PARSE_TAG = 'parse unit';
+ performance.logStartTime(PARSE_TAG);
+ unit = request.context.computeResult(source, PARSED_UNIT);
+ performance.logElapseTime(PARSE_TAG);
+
+ if (unit.directives.any((d) => d is PartOfDirective)) {
+ List<Source> libraries = context.getLibrariesContaining(source);
+ if (libraries.isNotEmpty) {
+ libSource = libraries[0];
+ }
+ } else {
+ libSource = source;
+ }
- // Most (all?) contributors need declarations in scope to be resolved
- if (libSource != null) {
- unit = await _computeAsync(
- request,
- new LibrarySpecificUnit(libSource, source),
- resultDescriptor ?? RESOLVED_UNIT5,
- performance,
- 'resolve declarations');
+ // Most (all?) contributors need declarations in scope to be resolved
+ if (libSource != null) {
+ unit = await _computeAsync(
+ request,
+ new LibrarySpecificUnit(libSource, source),
+ resultDescriptor ?? RESOLVED_UNIT5,
+ performance,
+ 'resolve declarations');
+ }
}
DartCompletionRequestImpl dartRequest = new DartCompletionRequestImpl._(
+ request.result,
request.context,
request.resourceProvider,
request.searchEngine,

Powered by Google App Engine
This is Rietveld 408576698