Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndre Weinand2004-06-17 15:58:01 +0000
committerAndre Weinand2004-06-17 15:58:01 +0000
commit339248e6139f0aba611bc2480a1249aa7d98cf7c (patch)
tree7c48bc1853fbf44dceabe16f32ed0a73618ce507 /bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
parentb9cc42261be95cf678107a5354bb97137980e1c0 (diff)
downloadeclipse.platform.team-339248e6139f0aba611bc2480a1249aa7d98cf7c.tar.gz
eclipse.platform.team-339248e6139f0aba611bc2480a1249aa7d98cf7c.tar.xz
eclipse.platform.team-339248e6139f0aba611bc2480a1249aa7d98cf7c.zip
fix for #37648: Exceptions after one of the compare viewer inputs got deleted
Diffstat (limited to 'bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java')
-rw-r--r--bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java61
1 files changed, 52 insertions, 9 deletions
diff --git a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
index 496dddaf8..3ec22c11a 100644
--- a/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
+++ b/bundles/org.eclipse.compare/plugins/org.eclipse.compare/compare/org/eclipse/compare/contentmergeviewer/TextMergeViewer.java
@@ -60,6 +60,7 @@ import org.eclipse.compare.*;
import org.eclipse.compare.internal.ICompareContextIds;
import org.eclipse.compare.internal.MergeSourceViewer;
import org.eclipse.compare.internal.BufferedCanvas;
+import org.eclipse.compare.internal.MergeViewerContentProvider;
import org.eclipse.compare.internal.Utilities;
import org.eclipse.compare.internal.TokenComparator;
import org.eclipse.compare.internal.DocLineComparator;
@@ -257,6 +258,8 @@ public class TextMergeViewer extends ContentMergeViewer {
private IPositionUpdater fPositionUpdater;
private boolean fIsMotif;
private boolean fIsCarbon;
+
+ private boolean fHasErrors;
// SWT widgets
@@ -1664,16 +1667,18 @@ public class TextMergeViewer extends ContentMergeViewer {
fChangeDiffs= null;
fAllDiffs= null;
fEndOfDocReached= false;
+ fHasErrors= false; // start with no errors
CompareConfiguration cc= getCompareConfiguration();
IMergeViewerContentProvider cp= getMergeContentProvider();
- boolean rightEditable= cc.isRightEditable() && cp.isRightEditable(input);
- boolean leftEditable= cc.isLeftEditable() && cp.isLeftEditable(input);
+ if (cp instanceof MergeViewerContentProvider) {
+ MergeViewerContentProvider mcp= (MergeViewerContentProvider) cp;
+ mcp.setAncestorError(null);
+ mcp.setLeftError(null);
+ mcp.setRightError(null);
+ }
- fRight.setEditable(rightEditable);
- fLeft.setEditable(leftEditable);
-
// set new documents
setDocument(fLeft, 'L', left);
fLeftLineCount= fLeft.getLineCount();
@@ -1685,13 +1690,21 @@ public class TextMergeViewer extends ContentMergeViewer {
setDocument(fAncestor, 'A', ancestor);
- doDiff();
-
+ updateHeader();
+ updateControls();
+ updateToolItems();
+
+ if (!fHasErrors)
+ doDiff();
+
+ fRight.setEditable(cc.isRightEditable() && cp.isRightEditable(input));
+ fLeft.setEditable(cc.isLeftEditable() && cp.isLeftEditable(input));
+
invalidateLines();
updateVScrollBar();
refreshBirdsEyeView();
- if (!emptyInput && !fComposite.isDisposed()) {
+ if (!fHasErrors && !emptyInput && !fComposite.isDisposed()) {
Diff selectDiff= null;
if (FIX_47640) {
if (leftRange != null)
@@ -1878,6 +1891,25 @@ public class TextMergeViewer extends ContentMergeViewer {
return 0;
}
+ private void setError(char type, String message) {
+ IMergeViewerContentProvider cp= getMergeContentProvider();
+ if (cp instanceof MergeViewerContentProvider) {
+ MergeViewerContentProvider mcp= (MergeViewerContentProvider) cp;
+ switch (type) {
+ case 'A':
+ mcp.setAncestorError(message);
+ break;
+ case 'L':
+ mcp.setLeftError(message);
+ break;
+ case 'R':
+ mcp.setRightError(message);
+ break;
+ }
+ }
+ fHasErrors= true;
+ }
+
/**
* Returns true if a new Document could be installed.
*/
@@ -1906,7 +1938,7 @@ public class TextMergeViewer extends ContentMergeViewer {
try {
s= Utilities.readString(sca);
} catch (CoreException ex) {
- // NeedWork
+ setError(type, ex.getMessage());
}
newDoc= new Document(s != null ? s : ""); //$NON-NLS-1$
@@ -3162,6 +3194,17 @@ public class TextMergeViewer extends ContentMergeViewer {
if (fIgnoreAncestorItem != null)
fIgnoreAncestorItem.setVisible(isThreeWay());
+ if (fCopyDiffLeftToRightItem != null) {
+ IAction a= fCopyDiffLeftToRightItem.getAction();
+ if (a != null)
+ a.setEnabled(a.isEnabled() && !fHasErrors);
+ }
+ if (fCopyDiffRightToLeftItem != null) {
+ IAction a= fCopyDiffRightToLeftItem.getAction();
+ if (a != null)
+ a.setEnabled(a.isEnabled() && !fHasErrors);
+ }
+
super.updateToolItems();
}

Back to the top