Chromium Code Reviews| Index: pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart |
| diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart |
| index 51f27c477f08c2c93a230730ce32848e3dd505b1..cabfb4d8d2545fbff9331edc69b0b453938479dc 100644 |
| --- a/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart |
| +++ b/pkg/analysis_server/lib/src/services/refactoring/rename_unit_member.dart |
| @@ -15,6 +15,7 @@ import 'package:analysis_server/src/services/refactoring/refactoring.dart'; |
| import 'package:analysis_server/src/services/refactoring/rename.dart'; |
| import 'package:analysis_server/src/services/search/element_visitors.dart'; |
| import 'package:analysis_server/src/services/search/search_engine.dart'; |
| +import 'package:analyzer/src/generated/ast.dart' show Identifier; |
| import 'package:analyzer/src/generated/element.dart'; |
| import 'package:analyzer/src/generated/java_core.dart'; |
| @@ -127,13 +128,14 @@ class _RenameUnitMemberValidator { |
| _RenameUnitMemberValidator.forRename( |
| this.searchEngine, this.element, this.name) |
| : isRename = true { |
| - library = element.getAncestor((e) => e is LibraryElement); |
| + library = element.library; |
| elementKind = element.kind; |
| } |
| Future<RefactoringStatus> validate() async { |
| _validateWillConflict(); |
| if (isRename) { |
| + await _validateWillBeInvisible(); |
| await _validateWillBeShadowed(); |
| } |
| await _validateWillShadow(); |
| @@ -165,15 +167,31 @@ class _RenameUnitMemberValidator { |
| } |
| /** |
| - * Validates if any usage of [element] renamed to [name] will be shadowed. |
| + * Validates if any usage of [element] renamed to [name] will be invisible. |
| */ |
| - Future _validateWillBeShadowed() async { |
| - if (!isRename) { |
| + Future _validateWillBeInvisible() async { |
|
Brian Wilkerson
2015/06/01 17:32:29
It's sad to see this method duplicated. Could we m
|
| + if (!Identifier.isPrivateName(name)) { |
| return; |
| } |
| List<SearchMatch> references = await searchEngine.searchReferences(element); |
| for (SearchMatch reference in references) { |
| Element refElement = reference.element; |
| + LibraryElement refLibrary = refElement.library; |
| + if (refLibrary != library) { |
| + String message = format("Renamed {0} will be invisible in '{1}'.", |
| + getElementKindName(element), getElementQualifiedName(refLibrary)); |
| + result.addError(message, newLocation_fromMatch(reference)); |
| + } |
| + } |
| + } |
| + |
| + /** |
| + * Validates if any usage of [element] renamed to [name] will be shadowed. |
| + */ |
| + Future _validateWillBeShadowed() async { |
| + List<SearchMatch> references = await searchEngine.searchReferences(element); |
| + for (SearchMatch reference in references) { |
| + Element refElement = reference.element; |
| ClassElement refClass = refElement.getAncestor((e) => e is ClassElement); |
| if (refClass != null) { |
| visitChildren(refClass, (shadow) { |