Index: pkg/analysis_server/lib/src/services/completion/completion_dart.dart |
diff --git a/pkg/analysis_server/lib/src/services/completion/completion_dart.dart b/pkg/analysis_server/lib/src/services/completion/completion_dart.dart |
index 1cfff042d6017ca98311ae8b46b881391146b2e3..90b3191683a4c0e0d29e5dff2b1017f26ad84070 100644 |
--- a/pkg/analysis_server/lib/src/services/completion/completion_dart.dart |
+++ b/pkg/analysis_server/lib/src/services/completion/completion_dart.dart |
@@ -4,11 +4,18 @@ |
library analysis_server.src.services.completion.completion_dart; |
+import 'dart:async'; |
+ |
import 'package:analysis_server/src/provisional/completion/completion_core.dart'; |
import 'package:analysis_server/src/provisional/completion/completion_dart.dart'; |
import 'package:analysis_server/src/provisional/completion/dart/completion_target.dart'; |
import 'package:analysis_server/src/services/completion/completion_core.dart'; |
+import 'package:analyzer/src/context/context.dart'; |
import 'package:analyzer/src/generated/ast.dart'; |
+import 'package:analyzer/src/task/dart.dart'; |
+import 'package:analyzer/task/dart.dart'; |
+import 'package:analyzer/task/model.dart'; |
+import 'package:analyzer/src/generated/element.dart'; |
/** |
* The information about a requested list of completions within a Dart file. |
@@ -16,26 +23,39 @@ import 'package:analyzer/src/generated/ast.dart'; |
class DartCompletionRequestImpl extends CompletionRequestImpl |
implements DartCompletionRequest { |
/** |
- * The compilation unit in which the completion was requested. |
+ * The parsed completion target. This determines |
+ * what part of the parse tree will receive the newly inserted text. |
+ * Use [resolvedDeclarationTarget] to obtain a resolved completion target. |
*/ |
- final CompilationUnit unit; |
+ final CompletionTarget parsedTarget; |
- /** |
- * A flag indicating whether the compilation [unit] is resolved. |
- */ |
- final bool isResolved; |
+ @deprecated // Use parsedTarget |
+ CompletionTarget get target => parsedTarget; |
- /** |
- * The completion target. This determines what part of the parse tree |
- * will receive the newly inserted text. |
- */ |
- final CompletionTarget target; |
+ @deprecated // Use parsedTarget.unit or resolvedTarget(...).unit |
+ CompilationUnit get unit => parsedTarget.unit; |
/** |
* Initialize a newly created completion request based on the given arguments. |
*/ |
- DartCompletionRequestImpl( |
- CompletionRequest request, this.unit, this.isResolved, this.target) |
+ DartCompletionRequestImpl(CompletionRequest request, this.parsedTarget) |
: super(request.context, request.resourceProvider, request.source, |
request.offset); |
+ |
+ @override |
+ Future<CompletionTarget> get resolvedDeclarationTarget async { |
+ // Determine the library containing the source |
+ var internalContext = (context as AnalysisContextImpl); |
+ LibraryElement libraryElement = await internalContext |
+ .computeResolvedCompilationUnitAsync2(source, LIBRARY_ELEMENT1); |
+ |
+ // Resolve the compilation unit |
+ CompilationUnit resolvedUnit = await internalContext |
+ .computeResolvedCompilationUnitAsync2( |
+ new LibrarySpecificUnit(libraryElement.source, source), |
+ RESOLVED_UNIT3); |
+ |
+ // Return a new target for the resolved unit |
+ return new CompletionTarget.forOffset(resolvedUnit, offset); |
+ } |
} |