Index: pkg/analysis_server/lib/src/edit/edit_domain.dart |
diff --git a/pkg/analysis_server/lib/src/edit/edit_domain.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart |
index 14e552791f90a9c27042fc0c4e66f73c119251be..3191835249b7a11dc0641181b385fc997d240883 100644 |
--- a/pkg/analysis_server/lib/src/edit/edit_domain.dart |
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart |
@@ -7,12 +7,14 @@ library edit.domain; |
import 'dart:async'; |
import 'package:analysis_server/plugin/edit/assist/assist_core.dart'; |
+import 'package:analysis_server/plugin/edit/assist/assist_dart.dart'; |
import 'package:analysis_server/plugin/edit/fix/fix_core.dart'; |
import 'package:analysis_server/src/analysis_server.dart'; |
import 'package:analysis_server/src/collections.dart'; |
import 'package:analysis_server/src/constants.dart'; |
import 'package:analysis_server/src/protocol_server.dart' hide Element; |
import 'package:analysis_server/src/services/correction/assist.dart'; |
+import 'package:analysis_server/src/services/correction/assist_internal.dart'; |
import 'package:analysis_server/src/services/correction/fix.dart'; |
import 'package:analysis_server/src/services/correction/organize_directives.dart'; |
import 'package:analysis_server/src/services/correction/sort_members.dart'; |
@@ -132,22 +134,35 @@ class EditDomainHandler implements RequestHandler { |
} |
Future getAssists(Request request) async { |
+ EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request); |
+ List<Assist> assists; |
if (server.options.enableNewAnalysisDriver) { |
- // TODO(scheglov) implement for the new analysis driver |
- return; |
+ AnalysisResult result = await server.getAnalysisResult(params.file); |
+ CompilationUnit unit = result.unit; |
+ DartAssistContext dartAssistContext = new _DartAssistContextForValues( |
+ unit.element.source, |
+ params.offset, |
+ params.length, |
+ unit.element.context, |
+ unit); |
+ try { |
+ AssistProcessor processor = new AssistProcessor(dartAssistContext); |
+ assists = await processor.compute(); |
+ } catch (_) {} |
+ } else { |
+ ContextSourcePair pair = server.getContextSourcePair(params.file); |
+ engine.AnalysisContext context = pair.context; |
+ Source source = pair.source; |
+ if (context != null && source != null) { |
+ assists = await computeAssists( |
+ server.serverPlugin, context, source, params.offset, params.length); |
+ } |
} |
- EditGetAssistsParams params = new EditGetAssistsParams.fromRequest(request); |
- ContextSourcePair pair = server.getContextSourcePair(params.file); |
- engine.AnalysisContext context = pair.context; |
- Source source = pair.source; |
+ // Send the assist changes. |
List<SourceChange> changes = <SourceChange>[]; |
- if (context != null && source != null) { |
- List<Assist> assists = await computeAssists( |
- server.serverPlugin, context, source, params.offset, params.length); |
- assists.forEach((Assist assist) { |
- changes.add(assist.change); |
- }); |
- } |
+ assists?.forEach((Assist assist) { |
+ changes.add(assist.change); |
+ }); |
Response response = |
new EditGetAssistsResult(changes).toResponse(request.id); |
server.sendResponse(response); |
@@ -390,6 +405,26 @@ class EditDomainHandler implements RequestHandler { |
} |
} |
+class _DartAssistContextForValues implements DartAssistContext { |
Paul Berry
2016/11/04 23:25:27
Can you clarify what "ForValues" means?
scheglov
2016/11/04 23:49:20
I will add a documentation comment.
|
+ @override |
+ final Source source; |
+ |
+ @override |
+ final int selectionOffset; |
+ |
+ @override |
+ final int selectionLength; |
+ |
+ @override |
+ final engine.AnalysisContext analysisContext; |
+ |
+ @override |
+ final CompilationUnit unit; |
+ |
+ _DartAssistContextForValues(this.source, this.selectionOffset, |
+ this.selectionLength, this.analysisContext, this.unit); |
+} |
+ |
/** |
* An object managing a single [Refactoring] instance. |
* |