FIX : NPE in local history
diff --git a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java
index caeddfa..1008a28 100644
--- a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java
@@ -99,7 +99,7 @@
private RGB removedColor;
- private IPropertyChangeListener structureSelectionListener;
+ private IPropertyChangeListener structurePropertyListener;
private IPropertyChangeListener preferenceListener;
@@ -141,7 +141,7 @@
// disables diff copy from either side
switchCopyState(false);
- structureSelectionListener = new IPropertyChangeListener() {
+ structurePropertyListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(EMFCompareConstants.PROPERTY_STRUCTURE_SELECTION)) {
Object selected = null;
@@ -151,10 +151,12 @@
if (selected instanceof DiffElement && !(selected instanceof DiffGroup && ((DiffGroup)selected).getSubDiffElements().size() == 0)) {
setSelection((DiffElement)selected);
}
+ } else if (event.getProperty().equals(EMFCompareConstants.PROPERTY_STRUCTURE_INPUT_CHANGED)) {
+ setInput(event.getNewValue());
}
}
};
- configuration.addPropertyChangeListener(structureSelectionListener);
+ configuration.addPropertyChangeListener(structurePropertyListener);
preferenceListener = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
@@ -181,7 +183,8 @@
* Redraws the center Control.
*/
public void updateCenter() {
- getCenterPart().redraw();
+ if (getCenterPart() != null)
+ getCenterPart().redraw();
}
/**
@@ -199,7 +202,7 @@
* @return The center {@link Canvas}.
*/
public Canvas getCenterPart() {
- if (canvas == null)
+ if (canvas == null && !getControl().isDisposed())
canvas = new AbstractBufferedCanvas((Composite)getControl()) {
public void doPaint(GC gc) {
// Draw lines on the left and right edges
@@ -207,12 +210,14 @@
gc.drawLine(0, 0, 0, getBounds().height);
gc.drawLine(getBounds().width - 1, 0, getBounds().width - 1, getBounds().height);
- for (final DiffElement diff : ((ModelCompareInput)getInput()).getDiffAsList()) {
+ final ModelCompareInput input = (ModelCompareInput)getInput();
+ for (final DiffElement diff : input.getDiffAsList()) {
drawLine(gc, getLeftItem(diff), getRightItem(diff), diff);
}
}
};
- canvas.moveAbove(null);
+ if (canvas != null)
+ canvas.moveAbove(null);
return canvas;
}
@@ -341,8 +346,10 @@
*/
public void setSelection(DiffElement diff) {
currentDiff = diff;
- leftPart.navigateToDiff(currentDiff);
- rightPart.navigateToDiff(currentDiff);
+ if (leftPart != null)
+ leftPart.navigateToDiff(currentDiff);
+ if (rightPart != null)
+ rightPart.navigateToDiff(currentDiff);
switchCopyState(true);
}
@@ -534,9 +541,12 @@
@Override
protected void updateToolItems() {
super.updateToolItems();
- copyDiffRightToLeft.setEnabled(configuration.isLeftEditable());
- copyDiffLeftToRight.setEnabled(configuration.isRightEditable());
- CompareViewerPane.getToolBarManager(getControl().getParent()).update(true);
+ if (copyDiffRightToLeft != null)
+ copyDiffRightToLeft.setEnabled(configuration.isLeftEditable());
+ if (copyDiffLeftToRight != null)
+ copyDiffLeftToRight.setEnabled(configuration.isRightEditable());
+ if (!getControl().isDisposed())
+ CompareViewerPane.getToolBarManager(getControl().getParent()).update(true);
}
/**
@@ -572,8 +582,8 @@
*/
protected void handleDispose(DisposeEvent event) {
super.handleDispose(event);
- configuration.removePropertyChangeListener(structureSelectionListener);
- structureSelectionListener = null;
+ configuration.removePropertyChangeListener(structurePropertyListener);
+ structurePropertyListener = null;
EMFCompareUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(preferenceListener);
preferenceListener = null;
leftPart = null;
@@ -600,7 +610,8 @@
@Override
protected void handleResizeLeftRight(int x, int y, int leftWidth, int centerWidth, int rightWidth,
int height) {
- getCenterPart().setBounds(leftWidth - (CENTER_WIDTH / 2), y, CENTER_WIDTH, height);
+ if (getCenterPart() != null)
+ getCenterPart().setBounds(leftWidth - (CENTER_WIDTH / 2), y, CENTER_WIDTH, height);
leftPart.setBounds(x, y, leftWidth - (CENTER_WIDTH / 2), height);
rightPart.setBounds(x + leftWidth + (CENTER_WIDTH / 2), y, rightWidth - (CENTER_WIDTH / 2), height);
update();
diff --git a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java
index 5753970..69c96c2 100644
--- a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java
+++ b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java
@@ -455,7 +455,7 @@
}
}
}
- if (selected.getData() instanceof EObject)
+ if (!selected.isDisposed() && selected.getData() instanceof EObject)
properties.setInput(findMatchFromElement((EObject)selected.getData()));
}
}