Chromium Code Reviews| Index: pkg/analysis_server/lib/src/services/refactoring/rename_import.dart |
| diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart |
| index e58b535de27dc25b613951afb7842d6028ef3131..e2f009dcd1bec4b88e90acde8a18ad4443a2358b 100644 |
| --- a/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart |
| +++ b/pkg/analysis_server/lib/src/services/refactoring/rename_import.dart |
| @@ -14,6 +14,7 @@ import 'package:analysis_server/src/services/refactoring/refactoring.dart'; |
| import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart'; |
| import 'package:analysis_server/src/services/refactoring/rename.dart'; |
| 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'; |
| @@ -76,10 +77,34 @@ class RenameImportRefactoringImpl extends RenameRefactoringImpl { |
| List<SourceReference> references = getSourceReferences(matches); |
| for (SourceReference reference in references) { |
| if (newName.isEmpty) { |
| - reference.addEdit(change, newName); |
| + reference.addEdit(change, ''); |
| } else { |
| - reference.addEdit(change, "${newName}."); |
| + SimpleIdentifier interpolationIdentifier = |
| + _getInterpolationIdentifier(reference); |
| + if (interpolationIdentifier != null) { |
| + doSourceChange_addElementEdit(change, reference.element, |
| + new SourceEdit(interpolationIdentifier.offset, |
| + interpolationIdentifier.length, |
| + '{$newName.${interpolationIdentifier.name}}')); |
| + } else { |
| + reference.addEdit(change, '$newName.'); |
| + } |
| } |
| } |
| } |
| + |
| + /** |
| + * If the given [reference] is before an [SimpleIdentifier] in an |
| + * [InterpolationElement], return it. Otherwise return `null`. |
| + */ |
| + SimpleIdentifier _getInterpolationIdentifier(SourceReference reference) { |
| + Source source = reference.element.source; |
| + CompilationUnit unit = context.parseCompilationUnit(source); |
| + NodeLocator nodeLocator = new NodeLocator.con1(reference.range.offset); |
| + AstNode node = nodeLocator.searchWithin(unit); |
| + if (node is SimpleIdentifier && node.parent is InterpolationExpression) { |
|
Paul Berry
2015/04/03 21:25:27
I don't think this is quite right. This if-test w
scheglov
2015/04/03 21:33:28
Fixed.
|
| + return node; |
| + } |
| + return null; |
| + } |
| } |