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

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

Issue 946023003: Fix for searching constructor references. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 5 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 | 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 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/status.dart'; 11 import 'package:analysis_server/src/services/correction/status.dart';
11 import 'package:analysis_server/src/services/correction/util.dart'; 12 import 'package:analysis_server/src/services/correction/util.dart';
12 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart '; 13 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart ';
13 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; 14 import 'package:analysis_server/src/services/refactoring/refactoring.dart';
14 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da rt'; 15 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da rt';
15 import 'package:analysis_server/src/services/refactoring/rename.dart'; 16 import 'package:analysis_server/src/services/refactoring/rename.dart';
16 import 'package:analysis_server/src/services/search/hierarchy.dart'; 17 import 'package:analysis_server/src/services/search/hierarchy.dart';
17 import 'package:analysis_server/src/services/search/search_engine.dart'; 18 import 'package:analysis_server/src/services/search/search_engine.dart';
18 import 'package:analyzer/src/generated/element.dart'; 19 import 'package:analyzer/src/generated/element.dart';
19 import 'package:analyzer/src/generated/java_core.dart'; 20 import 'package:analyzer/src/generated/java_core.dart';
21 import 'package:analyzer/src/generated/source.dart';
20 22
21 23
22 /** 24 /**
23 * A [Refactoring] for renaming [ConstructorElement]s. 25 * A [Refactoring] for renaming [ConstructorElement]s.
24 */ 26 */
25 class RenameConstructorRefactoringImpl extends RenameRefactoringImpl { 27 class RenameConstructorRefactoringImpl extends RenameRefactoringImpl {
26 RenameConstructorRefactoringImpl(SearchEngine searchEngine, 28 RenameConstructorRefactoringImpl(SearchEngine searchEngine,
27 ConstructorElement element) 29 ConstructorElement element)
28 : super(searchEngine, element); 30 : super(searchEngine, element);
29 31
(...skipping 14 matching lines...) Expand all
44 46
45 @override 47 @override
46 RefactoringStatus checkNewName() { 48 RefactoringStatus checkNewName() {
47 RefactoringStatus result = super.checkNewName(); 49 RefactoringStatus result = super.checkNewName();
48 result.addStatus(validateConstructorName(newName)); 50 result.addStatus(validateConstructorName(newName));
49 return result; 51 return result;
50 } 52 }
51 53
52 @override 54 @override
53 Future fillChange() async { 55 Future fillChange() async {
54 String replacement = newName.isEmpty ? '' : '.${newName}';
55 // update references
56 List<SearchMatch> matches = await searchEngine.searchReferences(element);
57 List<SourceReference> references = getSourceReferences(matches);
58 if (!element.isSynthetic) { 56 if (!element.isSynthetic) {
57 // prepare references
58 List<SearchMatch> matches = await searchEngine.searchReferences(element);
59 List<SourceReference> references = getSourceReferences(matches);
60 // append declaration
61 references.add(_createDeclarationReference());
62 // update references
63 String replacement = newName.isEmpty ? '' : '.${newName}';
59 for (SourceReference reference in references) { 64 for (SourceReference reference in references) {
60 reference.addEdit(change, replacement); 65 reference.addEdit(change, replacement);
61 } 66 }
62 } 67 }
63 } 68 }
64 69
65 void _analyzePossibleConflicts(RefactoringStatus result) { 70 void _analyzePossibleConflicts(RefactoringStatus result) {
66 // check if there are members with "newName" in the same ClassElement 71 // check if there are members with "newName" in the same ClassElement
67 ClassElement parentClass = element.enclosingElement; 72 ClassElement parentClass = element.enclosingElement;
68 for (Element newNameMember in getChildren(parentClass, newName)) { 73 for (Element newNameMember in getChildren(parentClass, newName)) {
69 String message = format( 74 String message = format(
70 "Class '{0}' already declares {1} with name '{2}'.", 75 "Class '{0}' already declares {1} with name '{2}'.",
71 parentClass.displayName, 76 parentClass.displayName,
72 getElementKindName(newNameMember), 77 getElementKindName(newNameMember),
73 newName); 78 newName);
74 result.addError(message, newLocation_fromElement(newNameMember)); 79 result.addError(message, newLocation_fromElement(newNameMember));
75 } 80 }
76 } 81 }
82
83 SourceReference _createDeclarationReference() {
84 SourceRange sourceRange;
85 if (element.periodOffset != null) {
86 sourceRange = rangeStartEnd(element.periodOffset, element.nameEnd);
87 } else {
88 sourceRange = rangeStartLength(element.nameEnd, 0);
89 }
90 String file = element.source.fullName;
91 return new SourceReference(file, sourceRange, element, true, true);
92 }
77 } 93 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698