diff options
author | cletavernie | 2012-08-24 12:45:09 +0000 |
---|---|---|
committer | cletavernie | 2012-08-24 12:45:09 +0000 |
commit | 80c84de1d986c4fc1c7791b3b9110fa9bd8af5ad (patch) | |
tree | c1fb5d8c344bd3c59ccb82e1929b39f4309f4ab1 /plugins | |
parent | 726cfa48d9c2d607268a05a40ac8ea7490a26a80 (diff) | |
download | org.eclipse.papyrus-80c84de1d986c4fc1c7791b3b9110fa9bd8af5ad.tar.gz org.eclipse.papyrus-80c84de1d986c4fc1c7791b3b9110fa9bd8af5ad.tar.xz org.eclipse.papyrus-80c84de1d986c4fc1c7791b3b9110fa9bd8af5ad.zip |
357193: Too many NullPointerException (NPE)
https://bugs.eclipse.org/bugs/show_bug.cgi?id=357193
Fix a few NPEs on the EMFTree
Diffstat (limited to 'plugins')
2 files changed, 28 insertions, 4 deletions
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/Activator.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/Activator.java index bb5b8d9c8c0..fca79656711 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/Activator.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/Activator.java @@ -13,6 +13,7 @@ *****************************************************************************/
package org.eclipse.papyrus.uml.diagram.emftree;
+import org.eclipse.papyrus.infra.core.log.LogHelper;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -27,6 +28,8 @@ public class Activator extends AbstractUIPlugin { // The shared instance
private static Activator plugin;
+ public static LogHelper log;
+
/**
* The constructor
*/
@@ -42,6 +45,7 @@ public class Activator extends AbstractUIPlugin { public void start(BundleContext context) throws Exception {
super.start(context);
plugin = this;
+ log = new LogHelper(this);
}
/*
diff --git a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/UMLEditor.java b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/UMLEditor.java index 3a11ae878b4..c25947a78b5 100644 --- a/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/UMLEditor.java +++ b/plugins/uml/diagram/org.eclipse.papyrus.uml.diagram.emftree/src/org/eclipse/papyrus/uml/diagram/emftree/UMLEditor.java @@ -43,13 +43,15 @@ import org.eclipse.ui.views.properties.IPropertySheetPage; *
* @generated
*/
-public class UMLEditor extends org.eclipse.uml2.uml.editor.presentation.UMLEditor implements IEditingDomainProvider,
-ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
+public class UMLEditor extends org.eclipse.uml2.uml.editor.presentation.UMLEditor implements IEditingDomainProvider, ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker {
/**
* ServiceRegistry used to retrieve needed services. This registry is provided by the multieditor.
*/
protected ServicesRegistry servicesRegistry;
+
+ protected CommandStackListener commandStackListener;
+
/**
*
* Constructor. Create an DiEditor using the {@link ServicesRegistry}.
@@ -75,9 +77,13 @@ ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker { // Add a listener to set the most recent command's affected objects to be the selection of
// the viewer with focus.
//
- commandStack.addCommandStackListener(new CommandStackListener() {
+
+ commandStackListener = new CommandStackListener() {
public void commandStackChanged(final EventObject event) {
+ if(getContainer().isDisposed()) {
+ return;
+ }
getContainer().getDisplay().asyncExec(new Runnable() {
public void run() {
@@ -96,7 +102,9 @@ ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker { });
}
- });
+ };
+
+ commandStack.addCommandStackListener(commandStackListener);
// Create the editing domain with a special command stack.
//
@@ -173,6 +181,18 @@ ISelectionProvider, IMenuListener, IViewerProvider, IGotoMarker { }
}
+ @Override
+ public void dispose() {
+ //super.dispose(); //FIXME: Fails on a ClassCastException: The ActionBarContributor is not accessible
+ try {
+ TransactionalEditingDomain papyrusEditingDomain = servicesRegistry.getService(TransactionalEditingDomain.class);
+ CommandStack commandStack = papyrusEditingDomain.getCommandStack();
+ commandStack.removeCommandStackListener(commandStackListener);
+ } catch (ServiceException e) {
+ Activator.log.error(e);
+ }
+ }
+
/**
* Has we have no actionBarContributor, we can't get the status line. So skip this method.
*/
|