Bug 573305: [SourceEditor] Add correction of selection in linked rename
quick fixes
Change-Id: I12b2bcfc4f837ed04a7e3741a742e179ed083f27
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/LinkedNamesAssistProposal.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/LinkedNamesAssistProposal.java
index 639e408..03839d9 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/LinkedNamesAssistProposal.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/LinkedNamesAssistProposal.java
@@ -127,7 +127,14 @@
@Override
public void apply(final ITextViewer viewer, final char trigger, final int stateMask, final int offset) {
try {
- Point seletion= viewer.getSelectedRange();
+ // by default full word is selected by linked model ui
+ // instead we want to keep the original selection by default
+ int selectionStartOffset;
+ int selectionEndOffset;
+ { final Point selection= viewer.getSelectedRange();
+ selectionStartOffset= selection.x;
+ selectionEndOffset= selection.x + selection.y;
+ }
final IDocument document= viewer.getDocument();
if (document == null) {
return;
@@ -156,16 +163,34 @@
ui.enter();
final String valueSuggestion= this.valueSuggestion;
+ final Position position0= group.getPositions()[0];
if (valueSuggestion != null) {
- final Position position= group.getPositions()[0];
- document.replace(position.getOffset(), position.getLength(), valueSuggestion);
- seletion= new Point(position.getOffset(), valueSuggestion.length());
+ document.replace(position0.getOffset(), position0.getLength(), valueSuggestion);
+ selectionStartOffset= position0.getOffset();
+ selectionEndOffset= selectionStartOffset + valueSuggestion.length();
+ }
+ else {
+ // correct selection if larger/outside of the initial position
+ final int positionEndOffset= position0.getOffset() + position0.getLength();
+ if (selectionStartOffset < position0.getOffset()) {
+ selectionStartOffset= position0.getOffset();
+ }
+ else if (selectionStartOffset > positionEndOffset) {
+ selectionStartOffset= positionEndOffset;
+ }
+ if (selectionEndOffset < selectionStartOffset) {
+ selectionEndOffset= selectionStartOffset;
+ }
+ else if (selectionEndOffset > positionEndOffset) {
+ selectionEndOffset= positionEndOffset;
+ }
}
- viewer.setSelectedRange(seletion.x, seletion.y); // by default full word is selected, restore original selection
+ viewer.setSelectedRange(selectionStartOffset, selectionStartOffset + selectionEndOffset);
}
catch (final BadLocationException e) {
- StatusManager.getManager().handle(new Status(IStatus.ERROR, LTKUIPlugin.BUNDLE_ID, -1, "Error initializing linked rename.", e)); //$NON-NLS-1$
+ StatusManager.getManager().handle(new Status(IStatus.ERROR, LTKUIPlugin.BUNDLE_ID, -1,
+ "Error initializing linked rename.", e )); //$NON-NLS-1$
}
}