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

Unified Diff: pkg/analysis_server/lib/src/edit/edit_domain.dart

Issue 402333006: Implementation of the 'edit.getFixes' API in server. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 5 months 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/edit/edit_domain.dart
diff --git a/pkg/analysis_server/lib/src/domain_edit.dart b/pkg/analysis_server/lib/src/edit/edit_domain.dart
similarity index 71%
rename from pkg/analysis_server/lib/src/domain_edit.dart
rename to pkg/analysis_server/lib/src/edit/edit_domain.dart
index 1448198309d11daa2a76dcce538a9fc9c7c099cf..68a3dbc6f91fa439cdf761eabc0d090395ad5763 100644
--- a/pkg/analysis_server/lib/src/domain_edit.dart
+++ b/pkg/analysis_server/lib/src/edit/edit_domain.dart
@@ -2,12 +2,20 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library domain.edit;
+library edit.domain;
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analysis_server/src/constants.dart';
import 'package:analysis_server/src/protocol.dart';
import 'package:analysis_services/constants.dart';
+import 'package:analysis_services/correction/fix.dart';
+import 'package:analysis_services/search/search_engine.dart';
+import 'package:analyzer/src/generated/error.dart' as engine;
+import 'package:analyzer/src/generated/engine.dart' as engine;
+import 'package:analyzer/src/generated/ast.dart';
+import 'package:analysis_server/src/computer/error.dart';
+import 'package:analysis_server/src/edit/fix.dart';
+
/**
* Instances of the class [EditDomainHandler] implement a [RequestHandler]
@@ -20,33 +28,15 @@ class EditDomainHandler implements RequestHandler {
final AnalysisServer server;
/**
- * Initialize a newly created handler to handle requests for the given [server].
+ * The [SearchEngine] for this server.
*/
- EditDomainHandler(this.server);
+ SearchEngine searchEngine;
- @override
- Response handleRequest(Request request) {
- try {
- String requestName = request.method;
- if (requestName == EDIT_APPLY_REFACTORING) {
- return applyRefactoring(request);
- } else if (requestName == EDIT_CREATE_REFACTORING) {
- return createRefactoring(request);
- } else if (requestName == EDIT_DELETE_REFACTORING) {
- return deleteRefactoring(request);
- } else if (requestName == EDIT_GET_ASSISTS) {
- return getAssists(request);
- } else if (requestName == EDIT_GET_FIXES) {
- return getFixes(request);
- } else if (requestName == EDIT_GET_REFACTORINGS) {
- return getRefactorings(request);
- } else if (requestName == EDIT_SET_REFACTORING_OPTIONS) {
- return setRefactoringOptions(request);
- }
- } on RequestFailure catch (exception) {
- return exception.response;
- }
- return null;
+ /**
+ * Initialize a newly created handler to handle requests for the given [server].
+ */
+ EditDomainHandler(this.server) {
+ searchEngine = server.searchEngine;
}
Response applyRefactoring(Request request) {
@@ -97,19 +87,29 @@ class EditDomainHandler implements RequestHandler {
}
Response getFixes(Request request) {
- // errors
- RequestDatum errorsDatum = request.getRequiredParameter(ERRORS);
- // TODO(paulberry): the API for edit.getFixes should be changed to so that
- // it doesn't use AnalysisError as an input type. This is necessary
- // because the JSON protocol for an AnalysisError doesn't contain the
- // errorCode, so we don't have enough information to reconstitute the error
- // object.
- // List<AnalysisError> errors = errorsDatum.asList((RequestDatum datum) {
- // return _createAnalysisError(request, datum);
- // });
-
- // TODO(brianwilkerson) implement
- return null;
+ String file = request.getRequiredParameter(FILE).asString();
+ int offset = request.getRequiredParameter(OFFSET).asInt();
+ List<ErrorFixes> errorFixesList = <ErrorFixes>[];
+ List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
+ for (CompilationUnit unit in units) {
+ engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
+ if (errorInfo != null) {
+ for (engine.AnalysisError error in errorInfo.errors) {
+ List<Fix> fixes = computeFixes(searchEngine, file, unit, error);
+ if (fixes.isNotEmpty) {
+ AnalysisError serverError =
+ new AnalysisError.fromEngine(errorInfo.lineInfo, error);
+ ErrorFixes errorFixes = new ErrorFixes(serverError);
+ errorFixesList.add(errorFixes);
+ fixes.forEach((fix) {
+ return errorFixes.addFix(fix);
+ });
+ }
+ }
+ }
+ }
+ // respond
+ return new Response(request.id)..setResult(FIXES, errorFixesList);
Paul Berry 2014/07/22 20:22:06 '..' looks weird here. Just use '.'.
scheglov 2014/07/22 20:31:31 We use ".." to set a result and still return the R
Paul Berry 2014/07/22 20:41:43 Ah, ok. I understand now.
}
Response getRefactorings(Request request) {
@@ -126,6 +126,31 @@ class EditDomainHandler implements RequestHandler {
return null;
}
+ @override
+ Response handleRequest(Request request) {
+ try {
+ String requestName = request.method;
+ if (requestName == EDIT_APPLY_REFACTORING) {
+ return applyRefactoring(request);
+ } else if (requestName == EDIT_CREATE_REFACTORING) {
+ return createRefactoring(request);
+ } else if (requestName == EDIT_DELETE_REFACTORING) {
+ return deleteRefactoring(request);
+ } else if (requestName == EDIT_GET_ASSISTS) {
+ return getAssists(request);
+ } else if (requestName == EDIT_GET_FIXES) {
+ return getFixes(request);
+ } else if (requestName == EDIT_GET_REFACTORINGS) {
+ return getRefactorings(request);
+ } else if (requestName == EDIT_SET_REFACTORING_OPTIONS) {
+ return setRefactoringOptions(request);
+ }
+ } on RequestFailure catch (exception) {
+ return exception.response;
+ }
+ return null;
Paul Berry 2014/07/22 20:22:06 Shouldn't we generate an error in the case of an u
scheglov 2014/07/22 20:31:31 No, we shouldn't. It is OK for the Domain to retur
Paul Berry 2014/07/22 20:41:43 Ok.
+ }
+
Response setRefactoringOptions(Request request) {
// id
RequestDatum idDatum = request.getRequiredParameter(ID);

Powered by Google App Engine
This is Rietveld 408576698