| 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 2369ad1c1b4c5abde1a0ffa4b4ced57d143378d3..6d3bec40b110acb68e0d86c9f200ce66c0b9e373 100644
|
| --- a/pkg/analysis_server/lib/src/edit/edit_domain.dart
|
| +++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
|
| @@ -9,6 +9,7 @@ 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/plugin/edit/fix/fix_dart.dart';
|
| import 'package:analysis_server/src/analysis_server.dart';
|
| import 'package:analysis_server/src/collections.dart';
|
| import 'package:analysis_server/src/constants.dart';
|
| @@ -16,6 +17,7 @@ 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/fix_internal.dart';
|
| import 'package:analysis_server/src/services/correction/organize_directives.dart';
|
| import 'package:analysis_server/src/services/correction/sort_members.dart';
|
| import 'package:analysis_server/src/services/correction/status.dart';
|
| @@ -24,6 +26,7 @@ import 'package:analysis_server/src/services/search/search_engine.dart';
|
| import 'package:analyzer/dart/ast/ast.dart';
|
| import 'package:analyzer/dart/element/element.dart';
|
| import 'package:analyzer/error/error.dart' as engine;
|
| +import 'package:analyzer/file_system/file_system.dart';
|
| import 'package:analyzer/src/dart/analysis/driver.dart';
|
| import 'package:analyzer/src/dart/scanner/scanner.dart' as engine;
|
| import 'package:analyzer/src/error/codes.dart' as engine;
|
| @@ -169,41 +172,63 @@ class EditDomainHandler implements RequestHandler {
|
| }
|
|
|
| Future getFixes(Request request) async {
|
| - if (server.options.enableNewAnalysisDriver) {
|
| - // TODO(scheglov) implement for the new analysis driver
|
| - return;
|
| - }
|
| var params = new EditGetFixesParams.fromRequest(request);
|
| String file = params.file;
|
| int offset = params.offset;
|
| - // add fixes
|
| +
|
| List<AnalysisErrorFixes> errorFixesList = <AnalysisErrorFixes>[];
|
| - List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
|
| - for (CompilationUnit unit in units) {
|
| - engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
|
| - if (errorInfo != null) {
|
| - LineInfo lineInfo = errorInfo.lineInfo;
|
| - int requestLine = lineInfo.getLocation(offset).lineNumber;
|
| - for (engine.AnalysisError error in errorInfo.errors) {
|
| - int errorLine = lineInfo.getLocation(error.offset).lineNumber;
|
| - if (errorLine == requestLine) {
|
| - List<Fix> fixes = await computeFixes(server.serverPlugin,
|
| - server.resourceProvider, unit.element.context, error);
|
| - if (fixes.isNotEmpty) {
|
| - AnalysisError serverError =
|
| - newAnalysisError_fromEngine(lineInfo, error);
|
| - AnalysisErrorFixes errorFixes =
|
| - new AnalysisErrorFixes(serverError);
|
| - errorFixesList.add(errorFixes);
|
| - fixes.forEach((fix) {
|
| - errorFixes.fixes.add(fix.change);
|
| - });
|
| + if (server.options.enableNewAnalysisDriver) {
|
| + AnalysisResult result = await server.getAnalysisResult(file);
|
| + CompilationUnit unit = result.unit;
|
| + LineInfo lineInfo = result.lineInfo;
|
| + int requestLine = lineInfo.getLocation(offset).lineNumber;
|
| + for (engine.AnalysisError error in result.errors) {
|
| + int errorLine = lineInfo.getLocation(error.offset).lineNumber;
|
| + if (errorLine == requestLine) {
|
| + var context = new _DartFixContextImpl(
|
| + server.resourceProvider, unit.element.context, unit, error);
|
| + List<Fix> fixes =
|
| + await new DefaultFixContributor().internalComputeFixes(context);
|
| + if (fixes.isNotEmpty) {
|
| + AnalysisError serverError =
|
| + newAnalysisError_fromEngine(lineInfo, error);
|
| + AnalysisErrorFixes errorFixes = new AnalysisErrorFixes(serverError);
|
| + errorFixesList.add(errorFixes);
|
| + fixes.forEach((fix) {
|
| + errorFixes.fixes.add(fix.change);
|
| + });
|
| + }
|
| + }
|
| + }
|
| + } else {
|
| + List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
|
| + for (CompilationUnit unit in units) {
|
| + engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
|
| + if (errorInfo != null) {
|
| + LineInfo lineInfo = errorInfo.lineInfo;
|
| + int requestLine = lineInfo.getLocation(offset).lineNumber;
|
| + for (engine.AnalysisError error in errorInfo.errors) {
|
| + int errorLine = lineInfo.getLocation(error.offset).lineNumber;
|
| + if (errorLine == requestLine) {
|
| + List<Fix> fixes = await computeFixes(server.serverPlugin,
|
| + server.resourceProvider, unit.element.context, error);
|
| + if (fixes.isNotEmpty) {
|
| + AnalysisError serverError =
|
| + newAnalysisError_fromEngine(lineInfo, error);
|
| + AnalysisErrorFixes errorFixes =
|
| + new AnalysisErrorFixes(serverError);
|
| + errorFixesList.add(errorFixes);
|
| + fixes.forEach((fix) {
|
| + errorFixes.fixes.add(fix.change);
|
| + });
|
| + }
|
| }
|
| }
|
| }
|
| }
|
| }
|
| - // respond
|
| +
|
| + // Send the response.
|
| server.sendResponse(
|
| new EditGetFixesResult(errorFixesList).toResponse(request.id));
|
| }
|
| @@ -430,6 +455,26 @@ class _DartAssistContextForValues implements DartAssistContext {
|
| }
|
|
|
| /**
|
| + * And implementation of [DartFixContext].
|
| + */
|
| +class _DartFixContextImpl implements DartFixContext {
|
| + @override
|
| + final ResourceProvider resourceProvider;
|
| +
|
| + @override
|
| + final engine.AnalysisContext analysisContext;
|
| +
|
| + @override
|
| + final CompilationUnit unit;
|
| +
|
| + @override
|
| + final engine.AnalysisError error;
|
| +
|
| + _DartFixContextImpl(
|
| + this.resourceProvider, this.analysisContext, this.unit, this.error);
|
| +}
|
| +
|
| +/**
|
| * An object managing a single [Refactoring] instance.
|
| *
|
| * The instance is identified by its kind, file, offset and length.
|
|
|