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

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

Issue 2289823002: Issue 27179. Materialize synthetic constructors on rename. (Closed)
Patch Set: Created 4 years, 4 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
Index: pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
index 23e03426174678ad57c5eb1436b720407c2394d8..72a29ce323a346248f8a25f84b744ccde1e2ff1e 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_constructor.dart
@@ -16,6 +16,7 @@ import 'package:analysis_server/src/services/refactoring/refactoring_internal.da
import 'package:analysis_server/src/services/refactoring/rename.dart';
import 'package:analysis_server/src/services/search/hierarchy.dart';
import 'package:analysis_server/src/services/search/search_engine.dart';
+import 'package:analyzer/dart/ast/ast.dart';
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/generated/java_core.dart';
import 'package:analyzer/src/generated/source.dart';
@@ -52,17 +53,19 @@ class RenameConstructorRefactoringImpl extends RenameRefactoringImpl {
@override
Future fillChange() async {
- if (!element.isSynthetic) {
- // prepare references
- List<SearchMatch> matches = await searchEngine.searchReferences(element);
- List<SourceReference> references = getSourceReferences(matches);
- // append declaration
+ // prepare references
+ List<SearchMatch> matches = await searchEngine.searchReferences(element);
+ List<SourceReference> references = getSourceReferences(matches);
+ // append declaration
+ if (element.isSynthetic) {
+ _replaceSynthetic();
+ } else {
references.add(_createDeclarationReference());
- // update references
- String replacement = newName.isEmpty ? '' : '.$newName';
- for (SourceReference reference in references) {
- reference.addEdit(change, replacement);
- }
+ }
+ // update references
+ String replacement = newName.isEmpty ? '' : '.$newName';
+ for (SourceReference reference in references) {
+ reference.addEdit(change, replacement);
}
}
@@ -95,4 +98,21 @@ class RenameConstructorRefactoringImpl extends RenameRefactoringImpl {
true,
true));
}
+
+ void _replaceSynthetic() {
+ ClassElement classElement = element.enclosingElement;
+ ClassDeclaration classNode = classElement.computeNode();
+ CorrectionUtils utils = new CorrectionUtils(classNode.parent);
+ ClassMemberLocation location =
+ utils.prepareNewConstructorLocation(classNode);
+ doSourceChange_addElementEdit(
+ change,
+ classElement,
+ new SourceEdit(
+ location.offset,
+ 0,
+ location.prefix +
+ '${classElement.name}.$newName();' +
+ location.suffix));
+ }
}

Powered by Google App Engine
This is Rietveld 408576698