Bug 553830: [SourceEditor] Add support for negative replacementOffset
in assist SourceProposal

(for context information in FragmentDocument)

Change-Id: Iffd7e7e8d74751a2429f583fd5e85837b2fbc35e
diff --git a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/SourceProposal.java b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/SourceProposal.java
index 84253f9..9d68f3c 100644
--- a/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/SourceProposal.java
+++ b/ltk/org.eclipse.statet.ltk.ui/src/org/eclipse/statet/ltk/ui/sourceediting/assist/SourceProposal.java
@@ -273,7 +273,7 @@
 	}
 	
 	protected @Nullable String getValidationPrefix(final int offset) throws BadLocationException {
-		final int startOffset= getReplacementOffset();
+		final int startOffset= Math.max(getReplacementOffset(), 0);
 		if (offset >= startOffset) {
 			return getInvocationContext().getDocument().get(startOffset, offset - startOffset);
 		}
@@ -419,7 +419,7 @@
 	@Override
 	public int getPrefixCompletionStart(final IDocument document,
 			final int offset) {
-		return getReplacementOffset();
+		return Math.max(getReplacementOffset(), 0);
 	}
 	
 	@Override
@@ -445,7 +445,7 @@
 		
 		final boolean smartToggle= (stateMask & SWT.CTRL) != 0;
 		try {
-			final int replacementOffset= getReplacementOffset();
+			final int replacementOffset= Math.max(getReplacementOffset(), 0);
 			final int replacementLength= computeReplacementLength(replacementOffset, viewer.getSelectedRange(), offset, isInOverwriteMode(smartToggle));
 			
 			if (validate(viewer.getDocument(), offset, null)) {
@@ -532,7 +532,7 @@
 		
 		final int widgetCaret= viewer.getTextWidget().getCaretOffset();
 		final int modelCaret= viewer.widgetOffset2ModelOffset(widgetCaret);
-		final int replacementOffset= getReplacementOffset();
+		final int replacementOffset= Math.max(getReplacementOffset(), 0);
 		int replacementLength;
 		try {
 			replacementLength= computeReplacementLength(replacementOffset, viewer.getSelectedRange(), modelCaret, true);