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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 library domain.edit; 5 library edit.domain;
6 6
7 import 'package:analysis_server/src/analysis_server.dart'; 7 import 'package:analysis_server/src/analysis_server.dart';
8 import 'package:analysis_server/src/constants.dart'; 8 import 'package:analysis_server/src/constants.dart';
9 import 'package:analysis_server/src/protocol.dart'; 9 import 'package:analysis_server/src/protocol.dart';
10 import 'package:analysis_services/constants.dart'; 10 import 'package:analysis_services/constants.dart';
11 import 'package:analysis_services/correction/fix.dart';
12 import 'package:analysis_services/search/search_engine.dart';
13 import 'package:analyzer/src/generated/error.dart' as engine;
14 import 'package:analyzer/src/generated/engine.dart' as engine;
15 import 'package:analyzer/src/generated/ast.dart';
16 import 'package:analysis_server/src/computer/error.dart';
17 import 'package:analysis_server/src/edit/fix.dart';
18
11 19
12 /** 20 /**
13 * Instances of the class [EditDomainHandler] implement a [RequestHandler] 21 * Instances of the class [EditDomainHandler] implement a [RequestHandler]
14 * that handles requests in the edit domain. 22 * that handles requests in the edit domain.
15 */ 23 */
16 class EditDomainHandler implements RequestHandler { 24 class EditDomainHandler implements RequestHandler {
17 /** 25 /**
18 * The analysis server that is using this handler to process requests. 26 * The analysis server that is using this handler to process requests.
19 */ 27 */
20 final AnalysisServer server; 28 final AnalysisServer server;
21 29
22 /** 30 /**
31 * The [SearchEngine] for this server.
32 */
33 SearchEngine searchEngine;
34
35 /**
23 * Initialize a newly created handler to handle requests for the given [server ]. 36 * Initialize a newly created handler to handle requests for the given [server ].
24 */ 37 */
25 EditDomainHandler(this.server); 38 EditDomainHandler(this.server) {
26 39 searchEngine = server.searchEngine;
27 @override
28 Response handleRequest(Request request) {
29 try {
30 String requestName = request.method;
31 if (requestName == EDIT_APPLY_REFACTORING) {
32 return applyRefactoring(request);
33 } else if (requestName == EDIT_CREATE_REFACTORING) {
34 return createRefactoring(request);
35 } else if (requestName == EDIT_DELETE_REFACTORING) {
36 return deleteRefactoring(request);
37 } else if (requestName == EDIT_GET_ASSISTS) {
38 return getAssists(request);
39 } else if (requestName == EDIT_GET_FIXES) {
40 return getFixes(request);
41 } else if (requestName == EDIT_GET_REFACTORINGS) {
42 return getRefactorings(request);
43 } else if (requestName == EDIT_SET_REFACTORING_OPTIONS) {
44 return setRefactoringOptions(request);
45 }
46 } on RequestFailure catch (exception) {
47 return exception.response;
48 }
49 return null;
50 } 40 }
51 41
52 Response applyRefactoring(Request request) { 42 Response applyRefactoring(Request request) {
53 // id 43 // id
54 RequestDatum idDatum = request.getRequiredParameter(ID); 44 RequestDatum idDatum = request.getRequiredParameter(ID);
55 String id = idDatum.asString(); 45 String id = idDatum.asString();
56 // TODO(brianwilkerson) implement 46 // TODO(brianwilkerson) implement
57 return null; 47 return null;
58 } 48 }
59 49
(...skipping 30 matching lines...) Expand all
90 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); 80 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET);
91 int offset = offsetDatum.asInt(); 81 int offset = offsetDatum.asInt();
92 // length 82 // length
93 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); 83 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH);
94 int length = lengthDatum.asInt(); 84 int length = lengthDatum.asInt();
95 // TODO(brianwilkerson) implement 85 // TODO(brianwilkerson) implement
96 return null; 86 return null;
97 } 87 }
98 88
99 Response getFixes(Request request) { 89 Response getFixes(Request request) {
100 // errors 90 String file = request.getRequiredParameter(FILE).asString();
101 RequestDatum errorsDatum = request.getRequiredParameter(ERRORS); 91 int offset = request.getRequiredParameter(OFFSET).asInt();
102 // TODO(paulberry): the API for edit.getFixes should be changed to so that 92 List<ErrorFixes> errorFixesList = <ErrorFixes>[];
103 // it doesn't use AnalysisError as an input type. This is necessary 93 List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
104 // because the JSON protocol for an AnalysisError doesn't contain the 94 for (CompilationUnit unit in units) {
105 // errorCode, so we don't have enough information to reconstitute the error 95 engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
106 // object. 96 if (errorInfo != null) {
107 // List<AnalysisError> errors = errorsDatum.asList((RequestDatum datum) { 97 for (engine.AnalysisError error in errorInfo.errors) {
108 // return _createAnalysisError(request, datum); 98 List<Fix> fixes = computeFixes(searchEngine, file, unit, error);
109 // }); 99 if (fixes.isNotEmpty) {
110 100 AnalysisError serverError =
111 // TODO(brianwilkerson) implement 101 new AnalysisError.fromEngine(errorInfo.lineInfo, error);
112 return null; 102 ErrorFixes errorFixes = new ErrorFixes(serverError);
103 errorFixesList.add(errorFixes);
104 fixes.forEach((fix) {
105 return errorFixes.addFix(fix);
106 });
107 }
108 }
109 }
110 }
111 // respond
112 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.
113 } 113 }
114 114
115 Response getRefactorings(Request request) { 115 Response getRefactorings(Request request) {
116 // file 116 // file
117 RequestDatum fileDatum = request.getRequiredParameter(FILE); 117 RequestDatum fileDatum = request.getRequiredParameter(FILE);
118 String file = fileDatum.asString(); 118 String file = fileDatum.asString();
119 // offset 119 // offset
120 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); 120 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET);
121 int offset = offsetDatum.asInt(); 121 int offset = offsetDatum.asInt();
122 // length 122 // length
123 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); 123 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH);
124 int length = lengthDatum.asInt(); 124 int length = lengthDatum.asInt();
125 // TODO(brianwilkerson) implement 125 // TODO(brianwilkerson) implement
126 return null; 126 return null;
127 } 127 }
128 128
129 @override
130 Response handleRequest(Request request) {
131 try {
132 String requestName = request.method;
133 if (requestName == EDIT_APPLY_REFACTORING) {
134 return applyRefactoring(request);
135 } else if (requestName == EDIT_CREATE_REFACTORING) {
136 return createRefactoring(request);
137 } else if (requestName == EDIT_DELETE_REFACTORING) {
138 return deleteRefactoring(request);
139 } else if (requestName == EDIT_GET_ASSISTS) {
140 return getAssists(request);
141 } else if (requestName == EDIT_GET_FIXES) {
142 return getFixes(request);
143 } else if (requestName == EDIT_GET_REFACTORINGS) {
144 return getRefactorings(request);
145 } else if (requestName == EDIT_SET_REFACTORING_OPTIONS) {
146 return setRefactoringOptions(request);
147 }
148 } on RequestFailure catch (exception) {
149 return exception.response;
150 }
151 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.
152 }
153
129 Response setRefactoringOptions(Request request) { 154 Response setRefactoringOptions(Request request) {
130 // id 155 // id
131 RequestDatum idDatum = request.getRequiredParameter(ID); 156 RequestDatum idDatum = request.getRequiredParameter(ID);
132 String id = idDatum.asString(); 157 String id = idDatum.asString();
133 // TODO(brianwilkerson) implement 158 // TODO(brianwilkerson) implement
134 return null; 159 return null;
135 } 160 }
136 } 161 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698