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

Side by Side Diff: pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart

Issue 2669353002: Stop using Element.computeNode() in refactorings and fixes. (Closed)
Patch Set: documentation comments Created 3 years, 10 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
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 services.src.refactoring.rename_constructor; 5 library services.src.refactoring.rename_constructor;
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/correction/util.dart'; 12 import 'package:analysis_server/src/services/correction/util.dart';
13 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart '; 13 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart ';
14 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; 14 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
15 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da rt'; 15 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da rt';
16 import 'package:analysis_server/src/services/refactoring/rename.dart'; 16 import 'package:analysis_server/src/services/refactoring/rename.dart';
17 import 'package:analysis_server/src/services/search/hierarchy.dart'; 17 import 'package:analysis_server/src/services/search/hierarchy.dart';
18 import 'package:analysis_server/src/services/search/search_engine.dart'; 18 import 'package:analysis_server/src/services/search/search_engine.dart';
19 import 'package:analysis_server/src/services/search/search_engine_internal.dart' ; 19 import 'package:analysis_server/src/services/search/search_engine_internal.dart' ;
20 import 'package:analyzer/dart/ast/ast.dart'; 20 import 'package:analyzer/dart/ast/ast.dart';
21 import 'package:analyzer/dart/element/element.dart'; 21 import 'package:analyzer/dart/element/element.dart';
22 import 'package:analyzer/src/dart/element/ast_provider.dart';
22 import 'package:analyzer/src/generated/java_core.dart'; 23 import 'package:analyzer/src/generated/java_core.dart';
23 import 'package:analyzer/src/generated/source.dart'; 24 import 'package:analyzer/src/generated/source.dart';
24 25
25 /** 26 /**
26 * A [Refactoring] for renaming [ConstructorElement]s. 27 * A [Refactoring] for renaming [ConstructorElement]s.
27 */ 28 */
28 class RenameConstructorRefactoringImpl extends RenameRefactoringImpl { 29 class RenameConstructorRefactoringImpl extends RenameRefactoringImpl {
30 final AstProvider astProvider;
31
29 RenameConstructorRefactoringImpl( 32 RenameConstructorRefactoringImpl(
30 SearchEngine searchEngine, ConstructorElement element) 33 SearchEngine searchEngine, this.astProvider, ConstructorElement element)
31 : super(searchEngine, element); 34 : super(searchEngine, element);
32 35
33 @override 36 @override
34 ConstructorElement get element => super.element as ConstructorElement; 37 ConstructorElement get element => super.element as ConstructorElement;
35 38
36 @override 39 @override
37 String get refactoringName { 40 String get refactoringName {
38 return "Rename Constructor"; 41 return "Rename Constructor";
39 } 42 }
40 43
(...skipping 13 matching lines...) Expand all
54 return result; 57 return result;
55 } 58 }
56 59
57 @override 60 @override
58 Future fillChange() async { 61 Future fillChange() async {
59 // prepare references 62 // prepare references
60 List<SearchMatch> matches = await searchEngine.searchReferences(element); 63 List<SearchMatch> matches = await searchEngine.searchReferences(element);
61 List<SourceReference> references = getSourceReferences(matches); 64 List<SourceReference> references = getSourceReferences(matches);
62 // append declaration 65 // append declaration
63 if (element.isSynthetic) { 66 if (element.isSynthetic) {
64 _replaceSynthetic(); 67 await _replaceSynthetic();
65 } else { 68 } else {
66 references.add(_createDeclarationReference()); 69 references.add(_createDeclarationReference());
67 } 70 }
68 // update references 71 // update references
69 String replacement = newName.isEmpty ? '' : '.$newName'; 72 String replacement = newName.isEmpty ? '' : '.$newName';
70 for (SourceReference reference in references) { 73 for (SourceReference reference in references) {
71 reference.addEdit(change, replacement); 74 reference.addEdit(change, replacement);
72 } 75 }
73 } 76 }
74 77
(...skipping 25 matching lines...) Expand all
100 return new SourceReference(new SearchMatchImpl( 103 return new SourceReference(new SearchMatchImpl(
101 element.context, 104 element.context,
102 element.library.source.uri.toString(), 105 element.library.source.uri.toString(),
103 element.source.uri.toString(), 106 element.source.uri.toString(),
104 MatchKind.DECLARATION, 107 MatchKind.DECLARATION,
105 sourceRange, 108 sourceRange,
106 true, 109 true,
107 true)); 110 true));
108 } 111 }
109 112
110 void _replaceSynthetic() { 113 Future<Null> _replaceSynthetic() async {
111 ClassElement classElement = element.enclosingElement; 114 ClassElement classElement = element.enclosingElement;
112 ClassDeclaration classNode = classElement.computeNode(); 115 ClassDeclaration classNode =
116 await astProvider.getResolvedNodeForElement(classElement);
113 CorrectionUtils utils = new CorrectionUtils(classNode.parent); 117 CorrectionUtils utils = new CorrectionUtils(classNode.parent);
114 ClassMemberLocation location = 118 ClassMemberLocation location =
115 utils.prepareNewConstructorLocation(classNode); 119 utils.prepareNewConstructorLocation(classNode);
116 doSourceChange_addElementEdit( 120 doSourceChange_addElementEdit(
117 change, 121 change,
118 classElement, 122 classElement,
119 new SourceEdit( 123 new SourceEdit(
120 location.offset, 124 location.offset,
121 0, 125 0,
122 location.prefix + 126 location.prefix +
123 '${classElement.name}.$newName();' + 127 '${classElement.name}.$newName();' +
124 location.suffix)); 128 location.suffix));
125 } 129 }
126 } 130 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698