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

Unified Diff: pkg/analysis_server/lib/src/services/refactoring/rename_local.dart

Issue 945693004: Issue 22288. Rename named parameters in hierarchy. (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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/refactoring/rename_local_test.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
index 7effb9dd00cad6c051154d8749d200eb59c5e583..9579643dfda428a02bfd6145b2fedc2411e2ec5e 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
@@ -17,12 +17,14 @@ import 'package:analysis_server/src/services/search/search_engine.dart';
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
import 'package:analyzer/src/generated/source.dart';
-
+import 'package:analyzer/src/generated/utilities_dart.dart';
/**
* A [Refactoring] for renaming [LocalElement]s.
*/
class RenameLocalRefactoringImpl extends RenameRefactoringImpl {
+ Set<LocalElement> elements = new Set<LocalElement>();
+
RenameLocalRefactoringImpl(SearchEngine searchEngine, LocalElement element)
: super(searchEngine, element);
@@ -41,15 +43,24 @@ class RenameLocalRefactoringImpl extends RenameRefactoringImpl {
}
@override
- Future<RefactoringStatus> checkFinalConditions() {
+ Future<RefactoringStatus> checkFinalConditions() async {
RefactoringStatus result = new RefactoringStatus();
+ // prepare all elements (usually one)
+ await _prepareElements();
// checks the resolved CompilationUnit(s)
- Source unitSource = element.source;
- List<Source> librarySources = context.getLibrariesContaining(unitSource);
- for (Source librarySource in librarySources) {
- _analyzePossibleConflicts_inLibrary(result, unitSource, librarySource);
+ for (LocalElement element in elements) {
+ Source unitSource = element.source;
+ List<Source> librarySources = context.getLibrariesContaining(unitSource);
+ for (Source librarySource in librarySources) {
+ _analyzePossibleConflicts_inLibrary(
+ result,
+ unitSource,
+ librarySource,
+ element);
+ }
}
- return new Future.value(result);
+ // done
+ return result;
}
@override
@@ -66,19 +77,20 @@ class RenameLocalRefactoringImpl extends RenameRefactoringImpl {
}
@override
- Future fillChange() {
- addDeclarationEdit(element);
- return searchEngine.searchReferences(element).then(addReferenceEdits);
+ Future fillChange() async {
+ for (Element element in elements) {
+ addDeclarationEdit(element);
+ await searchEngine.searchReferences(element).then(addReferenceEdits);
+ }
}
void _analyzePossibleConflicts_inLibrary(RefactoringStatus result,
- Source unitSource, Source librarySource) {
+ Source unitSource, Source librarySource, LocalElement element) {
// prepare resolved unit
CompilationUnit unit = null;
try {
unit = context.resolveCompilationUnit2(unitSource, librarySource);
- } catch (e) {
- }
+ } catch (e) {}
if (unit == null) {
return;
}
@@ -86,8 +98,34 @@ class RenameLocalRefactoringImpl extends RenameRefactoringImpl {
SourceRange elementRange = element.visibleRange;
unit.accept(new _ConflictValidatorVisitor(this, result, elementRange));
}
-}
+ /**
+ * Fills [elements] with [Element]s to rename.
+ */
+ Future _prepareElements() async {
+ Element enclosing = element.enclosingElement;
+ if (enclosing is MethodElement &&
+ element is ParameterElement &&
+ (element as ParameterElement).parameterKind == ParameterKind.NAMED) {
+ // prepare hierarchy methods
+ Set<ClassMemberElement> methods =
+ await getHierarchyMembers(searchEngine, enclosing);
+ // add named parameter from each method
+ for (ClassMemberElement method in methods) {
+ if (method is MethodElement) {
+ for (ParameterElement parameter in method.parameters) {
+ if (parameter.parameterKind == ParameterKind.NAMED &&
+ parameter.name == element.name) {
+ elements.add(parameter);
+ }
+ }
+ }
+ }
+ } else {
+ elements = new Set.from([element]);
+ }
+ }
+}
class _ConflictValidatorVisitor extends RecursiveAstVisitor {
final RenameLocalRefactoringImpl refactoring;
« no previous file with comments | « no previous file | pkg/analysis_server/test/services/refactoring/rename_local_test.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698