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

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

Issue 494153003: Return only fixes for the errors on the line of the given offset. (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
« no previous file with comments | « no previous file | pkg/analysis_server/test/edit/fixes_test.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/constants.dart'; 8 import 'package:analysis_server/src/constants.dart';
9 import 'package:analysis_server/src/edit/fix.dart'; 9 import 'package:analysis_server/src/edit/fix.dart';
10 import 'package:analysis_server/src/protocol.dart'; 10 import 'package:analysis_server/src/protocol.dart';
11 import 'package:analysis_server/src/protocol2.dart' show AnalysisError, 11 import 'package:analysis_server/src/protocol2.dart' show AnalysisError,
12 EditGetAssistsParams, EditGetAvailableRefactoringsParams, 12 EditGetAssistsParams, EditGetAvailableRefactoringsParams, EditGetFixesParams ;
13 EditGetFixesParams;
14 import 'package:analysis_server/src/services/correction/assist.dart'; 13 import 'package:analysis_server/src/services/correction/assist.dart';
15 import 'package:analysis_server/src/services/correction/change.dart'; 14 import 'package:analysis_server/src/services/correction/change.dart';
16 import 'package:analysis_server/src/services/correction/fix.dart'; 15 import 'package:analysis_server/src/services/correction/fix.dart';
17 import 'package:analysis_server/src/services/json.dart'; 16 import 'package:analysis_server/src/services/json.dart';
18 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; 17 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
19 import 'package:analysis_server/src/services/search/search_engine.dart'; 18 import 'package:analysis_server/src/services/search/search_engine.dart';
20 import 'package:analyzer/src/generated/ast.dart'; 19 import 'package:analyzer/src/generated/ast.dart';
21 import 'package:analyzer/src/generated/element.dart'; 20 import 'package:analyzer/src/generated/element.dart';
22 import 'package:analyzer/src/generated/engine.dart' as engine; 21 import 'package:analyzer/src/generated/engine.dart' as engine;
23 import 'package:analyzer/src/generated/error.dart' as engine; 22 import 'package:analyzer/src/generated/error.dart' as engine;
23 import 'package:analyzer/src/generated/source.dart';
24 24
25 25
26 /** 26 /**
27 * Instances of the class [EditDomainHandler] implement a [RequestHandler] 27 * Instances of the class [EditDomainHandler] implement a [RequestHandler]
28 * that handles requests in the edit domain. 28 * that handles requests in the edit domain.
29 */ 29 */
30 class EditDomainHandler implements RequestHandler { 30 class EditDomainHandler implements RequestHandler {
31 /** 31 /**
32 * The analysis server that is using this handler to process requests. 32 * The analysis server that is using this handler to process requests.
33 */ 33 */
(...skipping 11 matching lines...) Expand all
45 searchEngine = server.searchEngine; 45 searchEngine = server.searchEngine;
46 } 46 }
47 47
48 Response getAssists(Request request) { 48 Response getAssists(Request request) {
49 var params = new EditGetAssistsParams.fromRequest(request); 49 var params = new EditGetAssistsParams.fromRequest(request);
50 List<Change> changes = <Change>[]; 50 List<Change> changes = <Change>[];
51 List<CompilationUnit> units = 51 List<CompilationUnit> units =
52 server.getResolvedCompilationUnits(params.file); 52 server.getResolvedCompilationUnits(params.file);
53 if (units.isNotEmpty) { 53 if (units.isNotEmpty) {
54 CompilationUnit unit = units[0]; 54 CompilationUnit unit = units[0];
55 List<Assist> assists = computeAssists(searchEngine, unit, params.offset, 55 List<Assist> assists =
56 params.length); 56 computeAssists(searchEngine, unit, params.offset, params.length);
57 assists.forEach((Assist assist) { 57 assists.forEach((Assist assist) {
58 changes.add(assist.change); 58 changes.add(assist.change);
59 }); 59 });
60 } 60 }
61 // respond 61 // respond
62 Response response = new Response(request.id); 62 Response response = new Response(request.id);
63 response.setResult(ASSISTS, objectToJson(changes)); 63 response.setResult(ASSISTS, objectToJson(changes));
64 return response; 64 return response;
65 } 65 }
66 66
67 Response getAvailableRefactorings(Request request) { 67 Response getAvailableRefactorings(Request request) {
68 var params = new EditGetAvailableRefactoringsParams.fromRequest(request); 68 var params = new EditGetAvailableRefactoringsParams.fromRequest(request);
69 // TODO(paulberry): params.length isn't used. Is this a bug? 69 // TODO(paulberry): params.length isn't used. Is this a bug?
70 List<String> kinds = <String>[]; 70 List<String> kinds = <String>[];
71 List<Element> elements = server.getElementsAtOffset(params.file, 71 List<Element> elements =
72 params.offset); 72 server.getElementsAtOffset(params.file, params.offset);
73 if (elements.isNotEmpty) { 73 if (elements.isNotEmpty) {
74 Element element = elements[0]; 74 Element element = elements[0];
75 RenameRefactoring renameRefactoring = 75 RenameRefactoring renameRefactoring =
76 new RenameRefactoring(searchEngine, element); 76 new RenameRefactoring(searchEngine, element);
77 if (renameRefactoring != null) { 77 if (renameRefactoring != null) {
78 kinds.add(RefactoringKind.RENAME); 78 kinds.add(RefactoringKind.RENAME);
79 } 79 }
80 } 80 }
81 // respond 81 // respond
82 return new Response(request.id)..setResult(KINDS, kinds); 82 return new Response(request.id)..setResult(KINDS, kinds);
83 } 83 }
84 84
85 Response getFixes(Request request) { 85 Response getFixes(Request request) {
86 var params = new EditGetFixesParams.fromRequest(request); 86 var params = new EditGetFixesParams.fromRequest(request);
87 // TODO(paulberry): params.offset isn't used. Is this a bug? 87 String file = params.file;
88 int offset = params.offset;
89 // add fixes
88 List<ErrorFixes> errorFixesList = <ErrorFixes>[]; 90 List<ErrorFixes> errorFixesList = <ErrorFixes>[];
89 List<CompilationUnit> units = server.getResolvedCompilationUnits(params.file ); 91 List<CompilationUnit> units = server.getResolvedCompilationUnits(file);
90 for (CompilationUnit unit in units) { 92 for (CompilationUnit unit in units) {
91 engine.AnalysisErrorInfo errorInfo = server.getErrors(params.file); 93 engine.AnalysisErrorInfo errorInfo = server.getErrors(file);
92 if (errorInfo != null) { 94 if (errorInfo != null) {
95 LineInfo lineInfo = errorInfo.lineInfo;
96 int requestLine = lineInfo.getLocation(offset).lineNumber;
93 for (engine.AnalysisError error in errorInfo.errors) { 97 for (engine.AnalysisError error in errorInfo.errors) {
94 List<Fix> fixes = computeFixes(searchEngine, unit, error); 98 int errorLine = lineInfo.getLocation(error.offset).lineNumber;
95 if (fixes.isNotEmpty) { 99 if (errorLine == requestLine) {
96 AnalysisError serverError = 100 List<Fix> fixes = computeFixes(searchEngine, unit, error);
97 new AnalysisError.fromEngine(errorInfo.lineInfo, error); 101 if (fixes.isNotEmpty) {
98 ErrorFixes errorFixes = new ErrorFixes(serverError); 102 AnalysisError serverError =
99 errorFixesList.add(errorFixes); 103 new AnalysisError.fromEngine(lineInfo, error);
100 fixes.forEach((fix) { 104 ErrorFixes errorFixes = new ErrorFixes(serverError);
101 errorFixes.addFix(fix); 105 errorFixesList.add(errorFixes);
102 }); 106 fixes.forEach((fix) {
107 errorFixes.addFix(fix);
108 });
109 }
103 } 110 }
104 } 111 }
105 } 112 }
106 } 113 }
107 // respond 114 // respond
108 return new Response(request.id)..setResult(FIXES, errorFixesList); 115 return new Response(request.id)..setResult(FIXES, errorFixesList);
109 } 116 }
110 117
111 @override 118 @override
112 Response handleRequest(Request request) { 119 Response handleRequest(Request request) {
(...skipping 16 matching lines...) Expand all
129 136
130 class RefactoringKind { 137 class RefactoringKind {
131 static const String CONVERT_GETTER_TO_METHOD = 'CONVERT_GETTER_TO_METHOD'; 138 static const String CONVERT_GETTER_TO_METHOD = 'CONVERT_GETTER_TO_METHOD';
132 static const String CONVERT_METHOD_TO_GETTER = 'CONVERT_METHOD_TO_GETTER'; 139 static const String CONVERT_METHOD_TO_GETTER = 'CONVERT_METHOD_TO_GETTER';
133 static const String EXTRACT_LOCAL_VARIABLE = 'EXTRACT_LOCAL_VARIABLE'; 140 static const String EXTRACT_LOCAL_VARIABLE = 'EXTRACT_LOCAL_VARIABLE';
134 static const String EXTRACT_METHOD = 'EXTRACT_METHOD'; 141 static const String EXTRACT_METHOD = 'EXTRACT_METHOD';
135 static const String INLINE_LOCAL_VARIABLE = 'INLINE_LOCAL_VARIABLE'; 142 static const String INLINE_LOCAL_VARIABLE = 'INLINE_LOCAL_VARIABLE';
136 static const String INLINE_METHOD = 'INLINE_METHOD'; 143 static const String INLINE_METHOD = 'INLINE_METHOD';
137 static const String RENAME = 'RENAME'; 144 static const String RENAME = 'RENAME';
138 } 145 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/test/edit/fixes_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698