Java 在Eclipse AbstractTextEditor中使用其他可保存项

Java 在Eclipse AbstractTextEditor中使用其他可保存项,java,eclipse,eclipse-plugin,eclipse-rcp,Java,Eclipse,Eclipse Plugin,Eclipse Rcp,我有一个扩展AbstractTextEditor的文本编辑器,我还有一个大纲,当用户修改它的内容时需要保存它。我目前正在使用添加到编辑器中的可保存的 如果编辑器被标记为“脏”并保存,则可保存的也会保存。但是,如果可保存的状态更改为“dirty”,则文件名旁边的*不会出现。顶部菜单栏中的save按钮确实显示出来,但当我单击它时,什么也没有发生 这是我的实现: public class MyTextEditor extends AbstractTextEditor { ... pu

我有一个扩展AbstractTextEditor的文本编辑器,我还有一个大纲,当用户修改它的内容时需要保存它。我目前正在使用添加到编辑器中的
可保存的

如果编辑器被标记为“脏”并保存,则
可保存的
也会保存。但是,如果可保存的
状态更改为“dirty”,则文件名旁边的*不会出现。顶部菜单栏中的save按钮确实显示出来,但当我单击它时,什么也没有发生

这是我的实现:

public class MyTextEditor extends AbstractTextEditor {
    ...

    public void setOutlineSaveable(Saveable saveable) {
        this.outlineSaveable = saveable;
        ISaveablesLifecycleListener lifecycleListener = (ISaveablesLifecycleListener)getSite().getService(ISaveablesLifecycleListener.class);
        lifecycleListener.handleLifecycleEvent( new SaveablesLifecycleEvent(this, SaveablesLifecycleEvent.POST_OPEN, new Saveable[] {saveable}, false));
    }

    @Override
    public Saveable[] getSaveables() {
        if(outlineSaveable != null) {
        // copy Saveables from super.getSaveables() to a new array
        Saveable[] superSaveables = super.getSaveables();
        Saveable[] res = new Saveable[superSaveables.length + 1];

        int i = 0;
        for(; i < superSaveables.length; i++) {
            res[i] = superSaveables[i];
        }

        res[i] = outlineSaveable;
        return res; 
    }
    else
      return super.getSaveables();
    }

    public void saveableDirty() {
        firePropertyChange(PROP_DIRTY);
    }
}
viewer
是显示在
ContentOutlinePage
中的
GraphicalViewer

然后在另一个班级的某个地方,我打电话:

textEditor.setSaveable(grOutlinePage.getSaveable());

您可能需要重写主编辑器
isDirty()
方法,并测试每个
Saveable
对象脏标记


似乎处理多个可保存项的工作没有像可能的那样干净。

您可能需要覆盖编辑器
isDirty()
方法,并测试所有可保存项是否脏。这解决了我的问题,请将其作为答案发布?(我认为使用可保存项可以避免重写isDirty的必要性)
textEditor.setSaveable(grOutlinePage.getSaveable());