### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.ui
Index: ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java,v
retrieving revision 1.16
diff -u -r1.16 JavaStructureDiffViewer.java
--- ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java 16 Dec 2008 10:20:24 -0000 1.16
+++ ui/org/eclipse/jdt/internal/ui/compare/JavaStructureDiffViewer.java 31 Mar 2009 13:28:50 -0000
@@ -13,8 +13,10 @@
import java.util.Map;
import java.util.ResourceBundle;
+import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.ToolBar;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -37,12 +39,14 @@
import org.eclipse.compare.structuremergeviewer.IDiffContainer;
import org.eclipse.compare.structuremergeviewer.StructureDiffViewer;
+import org.eclipse.jdt.core.ElementChangedEvent;
+import org.eclipse.jdt.core.IElementChangedListener;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
// XXX: StructuredDiffViewer should allow subclassing, see: https://bugs.eclipse.org/bugs/show_bug.cgi?id=258907
-class JavaStructureDiffViewer extends StructureDiffViewer {
+class JavaStructureDiffViewer extends StructureDiffViewer implements IElementChangedListener {
/**
* Toggles a boolean property of an CompareConfiguration
.
@@ -91,6 +95,7 @@
super(parent, configuration);
fStructureCreator= new JavaStructureCreator();
setStructureCreator(fStructureCreator);
+ JavaCore.addElementChangedListener(this);
}
/**
@@ -149,6 +154,15 @@
super.compareInputChanged(input);
}
+ /*
+ * @see org.eclipse.compare.structuremergeviewer.StructureDiffViewer#handleDispose(org.eclipse.swt.events.DisposeEvent)
+ * @since 3.5
+ */
+ protected void handleDispose(DisposeEvent event) {
+ JavaCore.removeElementChangedListener(this);
+ super.handleDispose(event);
+ }
+
private Map getCompilerOptions(ITypedElement input) {
if (input instanceof IResourceProvider) {
IResource resource= ((IResourceProvider) input).getResource();
@@ -218,4 +232,38 @@
tb.getParent().layout(true);
}
}
+
+ /*
+ * @see org.eclipse.jdt.core.IElementChangedListener#elementChanged(org.eclipse.jdt.core.ElementChangedEvent)
+ * @since 3.5
+ */
+ public void elementChanged(ElementChangedEvent event) {
+ if (!isAffectedBy(event))
+ return;
+
+ Display display= getTree().getDisplay();
+ if (display.getThread() == Thread.currentThread())
+ contentChanged(null);
+ else {
+ display.asyncExec(new Runnable() {
+ public void run() {
+ contentChanged(null);
+ }
+ });
+ }
+ }
+
+ /**
+ * Tells whether this viewer is affected by the given event.
+ *
+ * @param event element changed event
+ * @return true
if this viewer is affected by the given event, false
+ * otherwise
+ * @since 3.5
+ */
+ private boolean isAffectedBy(ElementChangedEvent event) {
+ // FIXME: must implement
+ return true;
+ }
+
}