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

Side by Side Diff: pkg/analysis_server/lib/src/edit/edit_domain.dart

Issue 484713003: Support for the 'edit.getAvailableRefactorings' request. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 4 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 edit.domain; 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/computer/error.dart';
8 import 'package:analysis_server/src/constants.dart'; 9 import 'package:analysis_server/src/constants.dart';
10 import 'package:analysis_server/src/edit/fix.dart';
9 import 'package:analysis_server/src/protocol.dart'; 11 import 'package:analysis_server/src/protocol.dart';
10 import 'package:analysis_services/constants.dart'; 12 import 'package:analysis_services/constants.dart';
11 import 'package:analysis_services/correction/fix.dart'; 13 import 'package:analysis_services/correction/fix.dart';
14 import 'package:analysis_services/refactoring/refactoring.dart';
12 import 'package:analysis_services/search/search_engine.dart'; 15 import 'package:analysis_services/search/search_engine.dart';
16 import 'package:analyzer/src/generated/ast.dart';
17 import 'package:analyzer/src/generated/element.dart';
18 import 'package:analyzer/src/generated/engine.dart' as engine;
13 import 'package:analyzer/src/generated/error.dart' as engine; 19 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 20
19 21
20 /** 22 /**
21 * Instances of the class [EditDomainHandler] implement a [RequestHandler] 23 * Instances of the class [EditDomainHandler] implement a [RequestHandler]
22 * that handles requests in the edit domain. 24 * that handles requests in the edit domain.
23 */ 25 */
24 class EditDomainHandler implements RequestHandler { 26 class EditDomainHandler implements RequestHandler {
25 /** 27 /**
26 * The analysis server that is using this handler to process requests. 28 * The analysis server that is using this handler to process requests.
27 */ 29 */
28 final AnalysisServer server; 30 final AnalysisServer server;
29 31
30 /** 32 /**
31 * The [SearchEngine] for this server. 33 * The [SearchEngine] for this server.
32 */ 34 */
33 SearchEngine searchEngine; 35 SearchEngine searchEngine;
34 36
35 /** 37 /**
36 * Initialize a newly created handler to handle requests for the given [server ]. 38 * Initialize a newly created handler to handle requests for the given [server ].
37 */ 39 */
38 EditDomainHandler(this.server) { 40 EditDomainHandler(this.server) {
39 searchEngine = server.searchEngine; 41 searchEngine = server.searchEngine;
40 } 42 }
41 43
42 Response applyRefactoring(Request request) { 44 Response getAssists(Request request) {
43 // id
44 RequestDatum idDatum = request.getRequiredParameter(ID);
45 String id = idDatum.asString();
46 // TODO(brianwilkerson) implement
47 return null;
48 }
49
50 Response createRefactoring(Request request) {
51 // kind
52 RequestDatum kindDatum = request.getRequiredParameter(KIND);
53 String kind = kindDatum.asString();
54 // file 45 // file
55 RequestDatum fileDatum = request.getRequiredParameter(FILE); 46 RequestDatum fileDatum = request.getRequiredParameter(FILE);
56 String file = fileDatum.asString(); 47 String file = fileDatum.asString();
57 // offset 48 // offset
58 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); 49 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET);
59 int offset = offsetDatum.asInt(); 50 int offset = offsetDatum.asInt();
60 // length 51 // length
61 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH); 52 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH);
62 int length = lengthDatum.asInt(); 53 int length = lengthDatum.asInt();
63 // TODO(brianwilkerson) implement 54 // TODO(brianwilkerson) implement
64 return null; 55 return null;
65 } 56 }
66 57
67 Response deleteRefactoring(Request request) { 58 Response getAvailableRefactorings(Request request) {
68 // id 59 String file = request.getRequiredParameter(FILE).asString();
69 RequestDatum idDatum = request.getRequiredParameter(ID); 60 int offset = request.getRequiredParameter(OFFSET).asInt();
70 String id = idDatum.asString(); 61 int length = request.getRequiredParameter(LENGTH).asInt();
71 // TODO(brianwilkerson) implement 62 List<String> kinds = <String>[];
72 return null; 63 List<Element> elements = server.getElementsAtOffset(file, offset);
73 } 64 if (elements.isNotEmpty) {
74 65 Element element = elements[0];
75 Response getAssists(Request request) { 66 RenameRefactoring renameRefactoring =
76 // file 67 new RenameRefactoring(searchEngine, element);
77 RequestDatum fileDatum = request.getRequiredParameter(FILE); 68 if (renameRefactoring != null) {
78 String file = fileDatum.asString(); 69 kinds.add(RefactoringKind.RENAME);
79 // offset 70 }
80 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET); 71 }
81 int offset = offsetDatum.asInt(); 72 // respond
82 // length 73 return new Response(request.id)..setResult(KINDS, kinds);
83 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH);
84 int length = lengthDatum.asInt();
85 // TODO(brianwilkerson) implement
86 return null;
87 } 74 }
88 75
89 Response getFixes(Request request) { 76 Response getFixes(Request request) {
90 String file = request.getRequiredParameter(FILE).asString(); 77 String file = request.getRequiredParameter(FILE).asString();
91 int offset = request.getRequiredParameter(OFFSET).asInt(); 78 int offset = request.getRequiredParameter(OFFSET).asInt();
92 List<ErrorFixes> errorFixesList = <ErrorFixes>[]; 79 List<ErrorFixes> errorFixesList = <ErrorFixes>[];
93 List<CompilationUnit> units = server.getResolvedCompilationUnits(file); 80 List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
94 for (CompilationUnit unit in units) { 81 for (CompilationUnit unit in units) {
95 engine.AnalysisErrorInfo errorInfo = server.getErrors(file); 82 engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
96 if (errorInfo != null) { 83 if (errorInfo != null) {
97 for (engine.AnalysisError error in errorInfo.errors) { 84 for (engine.AnalysisError error in errorInfo.errors) {
98 List<Fix> fixes = computeFixes(searchEngine, unit, error); 85 List<Fix> fixes = computeFixes(searchEngine, unit, error);
99 if (fixes.isNotEmpty) { 86 if (fixes.isNotEmpty) {
100 AnalysisError serverError = 87 AnalysisError serverError =
101 new AnalysisError.fromEngine(errorInfo.lineInfo, error); 88 new AnalysisError.fromEngine(errorInfo.lineInfo, error);
102 ErrorFixes errorFixes = new ErrorFixes(serverError); 89 ErrorFixes errorFixes = new ErrorFixes(serverError);
103 errorFixesList.add(errorFixes); 90 errorFixesList.add(errorFixes);
104 fixes.forEach((fix) { 91 fixes.forEach((fix) {
105 return errorFixes.addFix(fix); 92 return errorFixes.addFix(fix);
106 }); 93 });
107 } 94 }
108 } 95 }
109 } 96 }
110 } 97 }
111 // respond 98 // respond
112 return new Response(request.id)..setResult(FIXES, errorFixesList); 99 return new Response(request.id)..setResult(FIXES, errorFixesList);
113 } 100 }
114 101
115 Response getRefactorings(Request request) {
116 // file
117 RequestDatum fileDatum = request.getRequiredParameter(FILE);
118 String file = fileDatum.asString();
119 // offset
120 RequestDatum offsetDatum = request.getRequiredParameter(OFFSET);
121 int offset = offsetDatum.asInt();
122 // length
123 RequestDatum lengthDatum = request.getRequiredParameter(LENGTH);
124 int length = lengthDatum.asInt();
125 // TODO(brianwilkerson) implement
126 return null;
127 }
128
129 @override 102 @override
130 Response handleRequest(Request request) { 103 Response handleRequest(Request request) {
131 try { 104 try {
132 String requestName = request.method; 105 String requestName = request.method;
133 if (requestName == EDIT_APPLY_REFACTORING) { 106 if (requestName == EDIT_GET_AVAILABLE_REFACTORINGS) {
134 return applyRefactoring(request); 107 return getAvailableRefactorings(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) { 108 } else if (requestName == EDIT_GET_ASSISTS) {
140 return getAssists(request); 109 return getAssists(request);
141 } else if (requestName == EDIT_GET_FIXES) { 110 } else if (requestName == EDIT_GET_FIXES) {
142 return getFixes(request); 111 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 } 112 }
148 } on RequestFailure catch (exception) { 113 } on RequestFailure catch (exception) {
149 return exception.response; 114 return exception.response;
150 } 115 }
151 return null; 116 return null;
152 } 117 }
118 }
153 119
154 Response setRefactoringOptions(Request request) { 120
155 // id 121 class RefactoringKind {
156 RequestDatum idDatum = request.getRequiredParameter(ID); 122 static const String CONVERT_GETTER_TO_METHOD = 'CONVERT_GETTER_TO_METHOD';
157 String id = idDatum.asString(); 123 static const String CONVERT_METHOD_TO_GETTER = 'CONVERT_METHOD_TO_GETTER';
158 // TODO(brianwilkerson) implement 124 static const String EXTRACT_LOCAL_VARIABLE = 'EXTRACT_LOCAL_VARIABLE';
159 return null; 125 static const String EXTRACT_METHOD = 'EXTRACT_METHOD';
160 } 126 static const String INLINE_LOCAL_VARIABLE = 'INLINE_LOCAL_VARIABLE';
127 static const String INLINE_METHOD = 'INLINE_METHOD';
128 static const String RENAME = 'RENAME';
161 } 129 }
OLDNEW
« no previous file with comments | « pkg/analysis_server/lib/src/constants.dart ('k') | pkg/analysis_server/test/edit/edit_domain_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698