Index: pkg/analysis_server/lib/src/utilities/change_builder_core.dart |
diff --git a/pkg/analysis_server/lib/src/utilities/change_builder_core.dart b/pkg/analysis_server/lib/src/utilities/change_builder_core.dart |
index c999300055d66e3977f6b7736165cf83cc10717a..9891a1ac91c92cb38930dcf22756bcc54996dcc2 100644 |
--- a/pkg/analysis_server/lib/src/utilities/change_builder_core.dart |
+++ b/pkg/analysis_server/lib/src/utilities/change_builder_core.dart |
@@ -72,6 +72,11 @@ class ChangeBuilderImpl implements ChangeBuilder { |
} |
return group; |
} |
+ |
+ @override |
+ void setSelection(Position position) { |
+ _change.selection = position; |
+ } |
} |
/** |
@@ -95,6 +100,12 @@ class EditBuilderImpl implements EditBuilder { |
final int length; |
/** |
+ * The offset of the selection for the change being built, or `-1` if the |
+ * selection is not inside the change being built. |
+ */ |
+ int _selectionOffset = -1; |
+ |
+ /** |
* The end-of-line marker used in the file being edited, or `null` if the |
* default marker should be used. |
*/ |
@@ -144,6 +155,11 @@ class EditBuilderImpl implements EditBuilder { |
} |
@override |
+ void selectHere() { |
+ _selectionOffset = offset + _buffer.length; |
+ } |
+ |
+ @override |
void write(String string) { |
_buffer.write(string); |
} |
@@ -185,12 +201,19 @@ class FileEditBuilderImpl implements FileEditBuilder { |
: fileEdit = new SourceFileEdit(path, timeStamp); |
@override |
+ void addDeletion(int offset, int length) { |
+ EditBuilderImpl builder = createEditBuilder(offset, length); |
+ fileEdit.add(builder.sourceEdit); |
+ } |
+ |
+ @override |
void addInsertion(int offset, void buildEdit(EditBuilder builder)) { |
EditBuilderImpl builder = createEditBuilder(offset, 0); |
try { |
buildEdit(builder); |
} finally { |
fileEdit.add(builder.sourceEdit); |
+ _captureSelection(builder); |
} |
} |
@@ -210,6 +233,7 @@ class FileEditBuilderImpl implements FileEditBuilder { |
buildEdit(builder); |
} finally { |
fileEdit.add(builder.sourceEdit); |
+ _captureSelection(builder); |
} |
} |
@@ -220,6 +244,7 @@ class FileEditBuilderImpl implements FileEditBuilder { |
builder.write(text); |
} finally { |
fileEdit.add(builder.sourceEdit); |
+ _captureSelection(builder); |
} |
} |
@@ -230,6 +255,7 @@ class FileEditBuilderImpl implements FileEditBuilder { |
builder.write(text); |
} finally { |
fileEdit.add(builder.sourceEdit); |
+ _captureSelection(builder); |
} |
} |
@@ -245,6 +271,18 @@ class FileEditBuilderImpl implements FileEditBuilder { |
} |
/** |
+ * Capture the selection offset if one was set. |
+ */ |
+ void _captureSelection(EditBuilderImpl builder) { |
+ int offset = builder._selectionOffset; |
+ if (offset >= 0) { |
+ Position position = |
+ new Position(fileEdit.file, offset + _deltaToOffset(offset)); |
+ changeBuilder.setSelection(position); |
+ } |
+ } |
+ |
+ /** |
* Return the current delta caused by edits that will be applied before the |
* given [offset]. In other words, if all of the edits that have so far been |
* added were to be applied, then the text at the given `offset` before the |