diff --git a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java index 3cd49b114a2f50b98d9a46b168de2bbd1430c746..434d89be01bf1fa9d07ef7d72edd3baf9d32c8fd 100644 --- a/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java +++ b/org.fortiss.tooling.base.ui/trunk/src/org/fortiss/tooling/base/ui/annotation/view/AnnotationViewPartBase.java @@ -38,6 +38,7 @@ import org.fortiss.tooling.base.ui.annotation.IAnnotationValueService; import org.fortiss.tooling.base.ui.editpart.DiagramEditPartBase; import org.fortiss.tooling.base.ui.editpart.ElementEditPartBase; import org.fortiss.tooling.kernel.model.IProjectRootElement; +import org.fortiss.tooling.kernel.service.IPersistencyService; import org.fortiss.tooling.kernel.ui.util.SelectionUtils; import org.fortiss.tooling.kernel.utils.EcoreUtils; @@ -71,12 +72,19 @@ public abstract class AnnotationViewPartBase extends ViewPart implements ISelect private final Adapter changeListener = new AdapterImpl() { @Override public void notifyChanged(Notification notification) { - if((notification.getEventType() == Notification.ADD) || - (notification.getEventType() == Notification.REMOVE || (notification - .getEventType() == Notification.SET))) { + if(notification.getEventType() == Notification.ADD || + notification.getEventType() == Notification.REMOVE || + notification.getEventType() == Notification.SET) { Object notifier = notification.getNotifier(); - if(notifier instanceof IModelElement) { + if((notifier instanceof IModelElement) && + (IPersistencyService.INSTANCE + .getTopLevelElementFor((IModelElement)notifier) != null)) { + // Ignore update requests for elements that are not hook to a top-level element, + // e.g. SET events that are fired when a component is removed (before the actual + // REMOVE event). Otherwise, the AnnotationValueService would create a NPE + // during the preparation of the context via + // KernelModelElementUtils.runAsCommand(). update((IModelElement)notifier); } }