| 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.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 Loading... |
| 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 } |
| OLD | NEW |