diff options
author | Dani Megert | 2013-01-08 17:59:52 +0000 |
---|---|---|
committer | Dani Megert | 2013-01-08 17:59:52 +0000 |
commit | 13831cac760c363d14333afea22515125cd81252 (patch) | |
tree | 4233af566acff80ed19adca93395853187a304c1 | |
parent | 90646e23eaab9e5eb6abdf0f21f5bcb779d6bfd8 (diff) | |
download | eclipse.platform.text-13831cac760c363d14333afea22515125cd81252.tar.gz eclipse.platform.text-13831cac760c363d14333afea22515125cd81252.tar.xz eclipse.platform.text-13831cac760c363d14333afea22515125cd81252.zip |
Fixed bug 397113: [quick diff] "Delete Added Line" operation fails tov20130108-175952
delete LF at end of file
-rw-r--r-- | org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java | 28 |
1 files changed, 25 insertions, 3 deletions
diff --git a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java index 5e4b9e658ac..498b80d0c08 100644 --- a/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java +++ b/org.eclipse.ui.workbench.texteditor/src/org/eclipse/ui/internal/texteditor/quickdiff/DocumentLineDiffer.java @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2009 IBM Corporation and others. + * Copyright (c) 2000, 2013 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -281,6 +281,11 @@ public class DocumentLineDiffer implements ILineDiffer, IDocumentListener, IAnno QuickDiffRangeDifference diff= region.getDifference(); int rOffset= fRightDocument.getLineOffset(line); int rLength= fRightDocument.getLineLength(line); + if (line > 0 && line == fRightDocument.getNumberOfLines() - 1) { + int lineDelimLength= fRightDocument.getLineDelimiter(line - 1).length(); + rLength= rLength + lineDelimLength; + rOffset= rOffset - lineDelimLength; + } int leftLine= diff.leftStart() + region.getOffset(); String replacement; if (leftLine >= diff.leftEnd()) // restoring a deleted line? @@ -307,8 +312,25 @@ public class DocumentLineDiffer implements ILineDiffer, IDocumentListener, IAnno QuickDiffRangeDifference diff= region.getDifference(); int rOffset= fRightDocument.getLineOffset(diff.rightStart()); int rLength= fRightDocument.getLineOffset(diff.rightEnd() - 1) + fRightDocument.getLineLength(diff.rightEnd() - 1) - rOffset; - int lOffset= fLeftDocument.getLineOffset(diff.leftStart()); - int lLength= fLeftDocument.getLineOffset(diff.leftEnd() - 1) + fLeftDocument.getLineLength(diff.leftEnd() - 1) - lOffset; + int leftStartLine= diff.leftStart(); + int lOffset; + if (leftStartLine < fLeftDocument.getNumberOfLines()) + lOffset= fLeftDocument.getLineOffset(leftStartLine); + else { + lOffset= fLeftDocument.getLineOffset(leftStartLine - 1) + fLeftDocument.getLineLength(leftStartLine - 1); + String lineDelim= fRightDocument.getLineDelimiter(diff.leftEnd()); + int lineDelimLength= lineDelim != null ? lineDelim.length() : 0; + rOffset= rOffset - lineDelimLength; + rLength= rLength + lineDelimLength; + } + + int leftEndLine= diff.leftEnd(); + int lLength; + if (leftEndLine > 0) + lLength= fLeftDocument.getLineOffset(diff.leftEnd() - 1) + fLeftDocument.getLineLength(diff.leftEnd() - 1) - lOffset; + else + lLength= fLeftDocument.getLength() - lOffset; + fRightDocument.replace(rOffset, rLength, fLeftDocument.get(lOffset, lLength)); } |