Chromium Code Reviews| 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_import; | 5 library services.src.refactoring.rename_import; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 | 8 |
| 9 import 'package:analysis_server/src/protocol_server.dart'; | 9 import 'package:analysis_server/src/protocol_server.dart'; |
| 10 import 'package:analysis_server/src/services/correction/source_range.dart'; | 10 import 'package:analysis_server/src/services/correction/source_range.dart'; |
| 11 import 'package:analysis_server/src/services/correction/status.dart'; | 11 import 'package:analysis_server/src/services/correction/status.dart'; |
| 12 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart '; | 12 import 'package:analysis_server/src/services/refactoring/naming_conventions.dart '; |
| 13 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; | 13 import 'package:analysis_server/src/services/refactoring/refactoring.dart'; |
| 14 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da rt'; | 14 import 'package:analysis_server/src/services/refactoring/refactoring_internal.da rt'; |
| 15 import 'package:analysis_server/src/services/refactoring/rename.dart'; | 15 import 'package:analysis_server/src/services/refactoring/rename.dart'; |
| 16 import 'package:analysis_server/src/services/search/search_engine.dart'; | 16 import 'package:analysis_server/src/services/search/search_engine.dart'; |
| 17 import 'package:analyzer/src/generated/ast.dart'; | |
| 17 import 'package:analyzer/src/generated/element.dart'; | 18 import 'package:analyzer/src/generated/element.dart'; |
| 18 import 'package:analyzer/src/generated/source.dart'; | 19 import 'package:analyzer/src/generated/source.dart'; |
| 19 | 20 |
| 20 /** | 21 /** |
| 21 * A [Refactoring] for renaming [ImportElement]s. | 22 * A [Refactoring] for renaming [ImportElement]s. |
| 22 */ | 23 */ |
| 23 class RenameImportRefactoringImpl extends RenameRefactoringImpl { | 24 class RenameImportRefactoringImpl extends RenameRefactoringImpl { |
| 24 RenameImportRefactoringImpl(SearchEngine searchEngine, ImportElement element) | 25 RenameImportRefactoringImpl(SearchEngine searchEngine, ImportElement element) |
| 25 : super(searchEngine, element); | 26 : super(searchEngine, element); |
| 26 | 27 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 69 } | 70 } |
| 70 if (edit != null) { | 71 if (edit != null) { |
| 71 doSourceChange_addElementEdit(change, element, edit); | 72 doSourceChange_addElementEdit(change, element, edit); |
| 72 } | 73 } |
| 73 } | 74 } |
| 74 // update references | 75 // update references |
| 75 List<SearchMatch> matches = await searchEngine.searchReferences(element); | 76 List<SearchMatch> matches = await searchEngine.searchReferences(element); |
| 76 List<SourceReference> references = getSourceReferences(matches); | 77 List<SourceReference> references = getSourceReferences(matches); |
| 77 for (SourceReference reference in references) { | 78 for (SourceReference reference in references) { |
| 78 if (newName.isEmpty) { | 79 if (newName.isEmpty) { |
| 79 reference.addEdit(change, newName); | 80 reference.addEdit(change, ''); |
| 80 } else { | 81 } else { |
| 81 reference.addEdit(change, "${newName}."); | 82 SimpleIdentifier interpolationIdentifier = |
| 83 _getInterpolationIdentifier(reference); | |
| 84 if (interpolationIdentifier != null) { | |
| 85 doSourceChange_addElementEdit(change, reference.element, | |
| 86 new SourceEdit(interpolationIdentifier.offset, | |
| 87 interpolationIdentifier.length, | |
| 88 '{$newName.${interpolationIdentifier.name}}')); | |
| 89 } else { | |
| 90 reference.addEdit(change, '$newName.'); | |
| 91 } | |
| 82 } | 92 } |
| 83 } | 93 } |
| 84 } | 94 } |
| 95 | |
| 96 /** | |
| 97 * If the given [reference] is before an [SimpleIdentifier] in an | |
| 98 * [InterpolationElement], return it. Otherwise return `null`. | |
| 99 */ | |
| 100 SimpleIdentifier _getInterpolationIdentifier(SourceReference reference) { | |
| 101 Source source = reference.element.source; | |
| 102 CompilationUnit unit = context.parseCompilationUnit(source); | |
| 103 NodeLocator nodeLocator = new NodeLocator.con1(reference.range.offset); | |
| 104 AstNode node = nodeLocator.searchWithin(unit); | |
| 105 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.
| |
| 106 return node; | |
| 107 } | |
| 108 return null; | |
| 109 } | |
| 85 } | 110 } |
| OLD | NEW |