OLD | NEW |
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 services.src.refactoring.convert_method_to_getter; | 5 library services.src.refactoring.convert_method_to_getter; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 | 8 |
9 import 'package:analysis_server/src/protocol_server.dart' hide Element; | 9 import 'package:analysis_server/src/protocol_server.dart' hide Element; |
10 import 'package:analysis_server/src/services/correction/source_range.dart'; | 10 import 'package:analysis_server/src/services/correction/source_range.dart'; |
11 import 'package:analysis_server/src/services/correction/status.dart'; | 11 import 'package:analysis_server/src/services/correction/status.dart'; |
12 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; | 12 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; |
13 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da
rt'; | 13 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da
rt'; |
14 import 'package:analysis_server/src/services/search/hierarchy.dart'; | 14 import 'package:analysis_server/src/services/search/hierarchy.dart'; |
15 import 'package:analysis_server/src/services/search/search_engine.dart'; | 15 import 'package:analysis_server/src/services/search/search_engine.dart'; |
16 import 'package:analyzer/dart/ast/ast.dart'; | 16 import 'package:analyzer/dart/ast/ast.dart'; |
17 import 'package:analyzer/dart/element/element.dart'; | 17 import 'package:analyzer/dart/element/element.dart'; |
18 import 'package:analyzer/src/dart/ast/utilities.dart'; | 18 import 'package:analyzer/src/dart/ast/utilities.dart'; |
19 import 'package:analyzer/src/generated/source.dart'; | 19 import 'package:analyzer/src/generated/source.dart'; |
20 | 20 |
21 /** | 21 /** |
22 * [ConvertMethodToGetterRefactoring] implementation. | 22 * [ConvertMethodToGetterRefactoring] implementation. |
23 */ | 23 */ |
24 class ConvertMethodToGetterRefactoringImpl extends RefactoringImpl | 24 class ConvertMethodToGetterRefactoringImpl extends RefactoringImpl |
25 implements ConvertMethodToGetterRefactoring { | 25 implements ConvertMethodToGetterRefactoring { |
26 final SearchEngine searchEngine; | 26 final SearchEngine searchEngine; |
| 27 final GetResolvedUnit getResolvedUnit; |
27 final ExecutableElement element; | 28 final ExecutableElement element; |
28 | 29 |
29 SourceChange change; | 30 SourceChange change; |
30 | 31 |
31 ConvertMethodToGetterRefactoringImpl(this.searchEngine, this.element); | 32 ConvertMethodToGetterRefactoringImpl( |
| 33 this.searchEngine, this.getResolvedUnit, this.element); |
32 | 34 |
33 @override | 35 @override |
34 String get refactoringName => 'Convert Method To Getter'; | 36 String get refactoringName => 'Convert Method To Getter'; |
35 | 37 |
36 @override | 38 @override |
37 Future<RefactoringStatus> checkFinalConditions() { | 39 Future<RefactoringStatus> checkFinalConditions() { |
38 RefactoringStatus result = new RefactoringStatus(); | 40 RefactoringStatus result = new RefactoringStatus(); |
39 return new Future.value(result); | 41 return new Future.value(result); |
40 } | 42 } |
41 | 43 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
107 SourceEdit edit = new SourceEdit(element.nameOffset, 0, 'get '); | 109 SourceEdit edit = new SourceEdit(element.nameOffset, 0, 'get '); |
108 doSourceChange_addElementEdit(change, element, edit); | 110 doSourceChange_addElementEdit(change, element, edit); |
109 } | 111 } |
110 // remove parameters | 112 // remove parameters |
111 { | 113 { |
112 SourceEdit edit = newSourceEdit_range(rangeNode(parameters), ''); | 114 SourceEdit edit = newSourceEdit_range(rangeNode(parameters), ''); |
113 doSourceChange_addElementEdit(change, element, edit); | 115 doSourceChange_addElementEdit(change, element, edit); |
114 } | 116 } |
115 } | 117 } |
116 | 118 |
117 Future _updateElementReferences(Element element) async { | 119 Future<Null> _updateElementReferences(Element element) async { |
118 List<SearchMatch> matches = await searchEngine.searchReferences(element); | 120 List<SearchMatch> matches = await searchEngine.searchReferences(element); |
119 List<SourceReference> references = getSourceReferences(matches); | 121 List<SourceReference> references = getSourceReferences(matches); |
120 for (SourceReference reference in references) { | 122 for (SourceReference reference in references) { |
121 Element refElement = reference.element; | 123 Element refElement = reference.element; |
122 SourceRange refRange = reference.range; | 124 SourceRange refRange = reference.range; |
123 // prepare invocation | 125 // prepare invocation |
124 MethodInvocation invocation; | 126 MethodInvocation invocation; |
125 { | 127 { |
126 CompilationUnit refUnit = refElement.unit; | 128 CompilationUnit refUnit = await getResolvedUnit(refElement); |
127 AstNode refNode = | 129 AstNode refNode = |
128 new NodeLocator(refRange.offset).searchWithin(refUnit); | 130 new NodeLocator(refRange.offset).searchWithin(refUnit); |
129 invocation = refNode.getAncestor((node) => node is MethodInvocation); | 131 invocation = refNode.getAncestor((node) => node is MethodInvocation); |
130 } | 132 } |
131 // we need invocation | 133 // we need invocation |
132 if (invocation != null) { | 134 if (invocation != null) { |
133 SourceRange range = rangeEndEnd(refRange, invocation); | 135 SourceRange range = rangeEndEnd(refRange, invocation); |
134 SourceEdit edit = newSourceEdit_range(range, ''); | 136 SourceEdit edit = newSourceEdit_range(range, ''); |
135 doSourceChange_addElementEdit(change, refElement, edit); | 137 doSourceChange_addElementEdit(change, refElement, edit); |
136 } | 138 } |
137 } | 139 } |
138 } | 140 } |
139 } | 141 } |
OLD | NEW |