| Index: pkg/analysis_server/lib/src/services/refactoring/rename.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename.dart b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
|
| index 001f08bb5de06e8ccaf60f63de5552307c3fc6ca..6b8062bdb8545a949160024073c64b1820cd4b71 100644
|
| --- a/pkg/analysis_server/lib/src/services/refactoring/rename.dart
|
| +++ b/pkg/analysis_server/lib/src/services/refactoring/rename.dart
|
| @@ -5,7 +5,6 @@
|
| library services.src.refactoring.rename;
|
|
|
| import 'dart:async';
|
| -import 'dart:collection';
|
|
|
| import 'package:analysis_server/src/protocol.dart' hide Element;
|
| import 'package:analysis_server/src/services/correction/source_range.dart';
|
| @@ -19,46 +18,6 @@ import 'package:analyzer/src/generated/source.dart';
|
|
|
|
|
| /**
|
| - * Returns the [Edit] to replace the given [SearchMatch] reference.
|
| - */
|
| -SourceEdit createReferenceEdit(SourceReference reference, String newText,
|
| - {String id}) {
|
| - return new SourceEdit.range(reference.range, newText, id: id);
|
| -}
|
| -
|
| -
|
| -/**
|
| - * Returns the file containing declaration of the given [Element].
|
| - */
|
| -String getElementFile(Element element) {
|
| - return element.source.fullName;
|
| -}
|
| -
|
| -
|
| -/**
|
| - * When a [Source] (a file) is used in more than one context, [SearchEngine]
|
| - * will return separate [SearchMatch]s for each context. But in rename
|
| - * refactorings we want to update each [Source] only once.
|
| - */
|
| -List<SourceReference> getSourceReferences(List<SearchMatch> matches) {
|
| - var uniqueReferences = new HashMap<SourceReference, SourceReference>();
|
| - for (SearchMatch match in matches) {
|
| - Element element = match.element;
|
| - String file = getElementFile(element);
|
| - SourceRange range = match.sourceRange;
|
| - SourceReference newReference =
|
| - new SourceReference(file, range, element, match.isResolved, match.isQualified);
|
| - SourceReference oldReference = uniqueReferences[newReference];
|
| - if (oldReference == null) {
|
| - uniqueReferences[newReference] = newReference;
|
| - oldReference = newReference;
|
| - }
|
| - }
|
| - return uniqueReferences.keys.toList();
|
| -}
|
| -
|
| -
|
| -/**
|
| * Returns `true` if two given [Element]s are [LocalElement]s and have
|
| * intersecting with visibility ranges.
|
| */
|
| @@ -156,6 +115,8 @@ abstract class RenameRefactoringImpl extends RefactoringImpl implements
|
| final String elementKindName;
|
| final String oldName;
|
|
|
| + SourceChange change;
|
| +
|
| String newName;
|
|
|
| RenameRefactoringImpl(SearchEngine searchEngine, Element element)
|
| @@ -166,27 +127,29 @@ abstract class RenameRefactoringImpl extends RefactoringImpl implements
|
| oldName = _getDisplayName(element);
|
|
|
| /**
|
| - * Adds the "Update declaration" [Edit] to [change].
|
| + * Adds a [SourceEdit] to update [element] name to [change].
|
| */
|
| - void addDeclarationEdit(SourceChange change, Element element) {
|
| + void addDeclarationEdit(Element element) {
|
| if (element != null) {
|
| - SourceEdit edit =
|
| - new SourceEdit.range(rangeElementName(element), newName);
|
| + SourceRange range = rangeElementName(element);
|
| + SourceEdit edit = new SourceEdit.range(range, newName);
|
| change.addElementEdit(element, edit);
|
| }
|
| }
|
|
|
| /**
|
| - * Adds an "Update reference" [Edit] to [change].
|
| + * Adds [SourceEdit]s to update [matches] to [change].
|
| */
|
| - void addReferenceEdit(SourceChange change, SourceReference reference) {
|
| - SourceEdit edit = createReferenceEdit(reference, newName);
|
| - change.addElementEdit(reference.element, edit);
|
| + void addReferenceEdits(List<SearchMatch> matches) {
|
| + List<SourceReference> references = getSourceReferences(matches);
|
| + for (SourceReference reference in references) {
|
| + reference.addEdit(change, newName);
|
| + }
|
| }
|
|
|
| @override
|
| Future<RefactoringStatus> checkInitialConditions() {
|
| - var result = new RefactoringStatus();
|
| + RefactoringStatus result = new RefactoringStatus();
|
| return new Future.value(result);
|
| }
|
|
|
| @@ -201,6 +164,17 @@ abstract class RenameRefactoringImpl extends RefactoringImpl implements
|
| }
|
|
|
| @override
|
| + Future<SourceChange> createChange() {
|
| + change = new SourceChange(refactoringName);
|
| + return fillChange().then((_) => change);
|
| + }
|
| +
|
| + /**
|
| + * Adds individual edits to [change].
|
| + */
|
| + Future fillChange();
|
| +
|
| + @override
|
| bool requiresPreview() {
|
| return false;
|
| }
|
| @@ -215,39 +189,3 @@ abstract class RenameRefactoringImpl extends RefactoringImpl implements
|
| return element.displayName;
|
| }
|
| }
|
| -
|
| -
|
| -/**
|
| - * The [SourceRange] in some [Source].
|
| - */
|
| -class SourceReference {
|
| - final String file;
|
| - final SourceRange range;
|
| - final Element element;
|
| - final bool isResolved;
|
| - final bool isQualified;
|
| -
|
| - SourceReference(this.file, this.range, this.element, this.isResolved,
|
| - this.isQualified);
|
| -
|
| - @override
|
| - int get hashCode {
|
| - int hash = file.hashCode;
|
| - hash = ((hash << 16) & 0xFFFFFFFF) + range.hashCode;
|
| - return hash;
|
| - }
|
| -
|
| - @override
|
| - bool operator ==(Object other) {
|
| - if (identical(other, this)) {
|
| - return true;
|
| - }
|
| - if (other is SourceReference) {
|
| - return other.file == file && other.range == range;
|
| - }
|
| - return false;
|
| - }
|
| -
|
| - @override
|
| - String toString() => '${file}@${range}';
|
| -}
|
|
|