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

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

Issue 490923003: Make EXTRACT_LOCAL and EXTRACT_METHOD refactorings available when there is a selection. (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/refactoring_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;
(...skipping 21 matching lines...) Expand all
45 searchEngine = server.searchEngine; 44 searchEngine = server.searchEngine;
46 } 45 }
47 46
48 Response getAssists(Request request) { 47 Response getAssists(Request request) {
49 var params = new EditGetAssistsParams.fromRequest(request); 48 var params = new EditGetAssistsParams.fromRequest(request);
50 List<Change> changes = <Change>[]; 49 List<Change> changes = <Change>[];
51 List<CompilationUnit> units = 50 List<CompilationUnit> units =
52 server.getResolvedCompilationUnits(params.file); 51 server.getResolvedCompilationUnits(params.file);
53 if (units.isNotEmpty) { 52 if (units.isNotEmpty) {
54 CompilationUnit unit = units[0]; 53 CompilationUnit unit = units[0];
55 List<Assist> assists = computeAssists(searchEngine, unit, params.offset, 54 List<Assist> assists =
56 params.length); 55 computeAssists(searchEngine, unit, params.offset, params.length);
57 assists.forEach((Assist assist) { 56 assists.forEach((Assist assist) {
58 changes.add(assist.change); 57 changes.add(assist.change);
59 }); 58 });
60 } 59 }
61 // respond 60 // respond
62 Response response = new Response(request.id); 61 Response response = new Response(request.id);
63 response.setResult(ASSISTS, objectToJson(changes)); 62 response.setResult(ASSISTS, objectToJson(changes));
64 return response; 63 return response;
65 } 64 }
66 65
67 Response getAvailableRefactorings(Request request) { 66 Response getAvailableRefactorings(Request request) {
68 var params = new EditGetAvailableRefactoringsParams.fromRequest(request); 67 var params = new EditGetAvailableRefactoringsParams.fromRequest(request);
69 // TODO(paulberry): params.length isn't used. Is this a bug? 68 String file = params.file;
69 int offset = params.offset;
70 int length = params.length;
70 List<String> kinds = <String>[]; 71 List<String> kinds = <String>[];
71 List<Element> elements = server.getElementsAtOffset(params.file, 72 // try EXTRACT_*
72 params.offset); 73 if (length != 0) {
73 if (elements.isNotEmpty) { 74 kinds.add(RefactoringKind.EXTRACT_LOCAL_VARIABLE);
74 Element element = elements[0]; 75 kinds.add(RefactoringKind.EXTRACT_METHOD);
75 RenameRefactoring renameRefactoring = 76 }
76 new RenameRefactoring(searchEngine, element); 77 // try RENAME
77 if (renameRefactoring != null) { 78 {
78 kinds.add(RefactoringKind.RENAME); 79 List<Element> elements = server.getElementsAtOffset(file, offset);
80 if (elements.isNotEmpty) {
81 Element element = elements[0];
82 RenameRefactoring renameRefactoring =
83 new RenameRefactoring(searchEngine, element);
84 if (renameRefactoring != null) {
85 kinds.add(RefactoringKind.RENAME);
86 }
79 } 87 }
80 } 88 }
81 // respond 89 // respond
82 return new Response(request.id)..setResult(KINDS, kinds); 90 return new Response(request.id)..setResult(KINDS, kinds);
83 } 91 }
84 92
85 Response getFixes(Request request) { 93 Response getFixes(Request request) {
86 var params = new EditGetFixesParams.fromRequest(request); 94 var params = new EditGetFixesParams.fromRequest(request);
87 // TODO(paulberry): params.offset isn't used. Is this a bug? 95 // TODO(paulberry): params.offset isn't used. Is this a bug?
88 List<ErrorFixes> errorFixesList = <ErrorFixes>[]; 96 List<ErrorFixes> errorFixesList = <ErrorFixes>[];
89 List<CompilationUnit> units = server.getResolvedCompilationUnits(params.file ); 97 List<CompilationUnit> units =
98 server.getResolvedCompilationUnits(params.file);
90 for (CompilationUnit unit in units) { 99 for (CompilationUnit unit in units) {
91 engine.AnalysisErrorInfo errorInfo = server.getErrors(params.file); 100 engine.AnalysisErrorInfo errorInfo = server.getErrors(params.file);
92 if (errorInfo != null) { 101 if (errorInfo != null) {
93 for (engine.AnalysisError error in errorInfo.errors) { 102 for (engine.AnalysisError error in errorInfo.errors) {
94 List<Fix> fixes = computeFixes(searchEngine, unit, error); 103 List<Fix> fixes = computeFixes(searchEngine, unit, error);
95 if (fixes.isNotEmpty) { 104 if (fixes.isNotEmpty) {
96 AnalysisError serverError = 105 AnalysisError serverError =
97 new AnalysisError.fromEngine(errorInfo.lineInfo, error); 106 new AnalysisError.fromEngine(errorInfo.lineInfo, error);
98 ErrorFixes errorFixes = new ErrorFixes(serverError); 107 ErrorFixes errorFixes = new ErrorFixes(serverError);
99 errorFixesList.add(errorFixes); 108 errorFixesList.add(errorFixes);
(...skipping 29 matching lines...) Expand all
129 138
130 class RefactoringKind { 139 class RefactoringKind {
131 static const String CONVERT_GETTER_TO_METHOD = 'CONVERT_GETTER_TO_METHOD'; 140 static const String CONVERT_GETTER_TO_METHOD = 'CONVERT_GETTER_TO_METHOD';
132 static const String CONVERT_METHOD_TO_GETTER = 'CONVERT_METHOD_TO_GETTER'; 141 static const String CONVERT_METHOD_TO_GETTER = 'CONVERT_METHOD_TO_GETTER';
133 static const String EXTRACT_LOCAL_VARIABLE = 'EXTRACT_LOCAL_VARIABLE'; 142 static const String EXTRACT_LOCAL_VARIABLE = 'EXTRACT_LOCAL_VARIABLE';
134 static const String EXTRACT_METHOD = 'EXTRACT_METHOD'; 143 static const String EXTRACT_METHOD = 'EXTRACT_METHOD';
135 static const String INLINE_LOCAL_VARIABLE = 'INLINE_LOCAL_VARIABLE'; 144 static const String INLINE_LOCAL_VARIABLE = 'INLINE_LOCAL_VARIABLE';
136 static const String INLINE_METHOD = 'INLINE_METHOD'; 145 static const String INLINE_METHOD = 'INLINE_METHOD';
137 static const String RENAME = 'RENAME'; 146 static const String RENAME = 'RENAME';
138 } 147 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/test/edit/refactoring_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698