获得有关 EAnnotation 引用列表更改的通知

Get notified on EAnnotation references list change

我正在创建一个基于 Sample Ecore editor (org.eclipse.emf.ecore* plugins) 的自定义 Ecore 编辑器,发现列表中的更改不会显示在模型更改通知中。例如,对 EAnnotation.references 列表的更改不会导致模型更改通知,而 EAnnotation.setSource() 方法会创建一个通知。我想,这就是 EAnnotationItemProvider 中的默认 getText() 方法仅使用 source 字段的原因之一。

我正在使用 references 字段的值来生成 EAnnotation 的 UI 表示,因此查看此字段的更改对于正确操作是必要的。

是否有一些标准的方法来观察这些变化并在模型视图上触发 refresh()

我发现通知已创建,但 notifyChanged() 方法最初忽略了它。这对我有用:

@Override
public void notifyChanged(Notification notification) {
    updateChildren(notification);

    switch (notification.getFeatureID(EAnnotation.class)) {
        case EcorePackage.EANNOTATION__SOURCE:
        case EcorePackage.EANNOTATION__REFERENCES: /*ADDED*/
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
            return;
        case EcorePackage.EANNOTATION__CONTENTS:
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, false));
            return;
        case EcorePackage.EANNOTATION__DETAILS: /*MODIFIED TO UPDATE VIEW*/
            fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), true, true));
            return;
    }
    super.notifyChanged(notification);
}