我如何制作 IEditorInput,它将从内存中读取文件?

How can I make IEditorInput, that will read file from memory?

我正在为 eclipse 编写插件,我需要为加载到 RAM 中的文件打开编辑器。当我打开新编辑器时,它从 IEditorInput 获取输入。有很多类实现了这个接口,但它们通常是从硬盘读取文件,或者它们对此没有用。

所以问题是: 如何制作将从内存中读取文件的 IEditorInput?

您可以使用实现 IStorageEditorInput 的对象作为编辑器输入。这使用 IStorage 对象来保存要编辑的内存数据。

一个简单的 IStorageEditorInput 实现类似于:

class StorageEditorInput extends PlatformObject implements IStorageEditorInput {
    private IStorage fStorage;

    public StorageEditorInput(IStorage storage) {
        fStorage = storage;
    }

    @Override
    public IStorage getStorage() {
        return fStorage;
    }

    @Override
    public ImageDescriptor getImageDescriptor() {
        return null;
    }

    @Override
    public String getName() {
        return getStorage().getName();
    }

    @Override
    public IPersistableElement getPersistable() {
        return null;
    }

    @Override
    public String getToolTipText() {
        return getStorage().getFullPath().toOSString();
    }

    @Override
    public boolean equals(Object object) {
        return object instanceof StorageEditorInput &&
         getStorage().equals(((StorageEditorInput)object).getStorage());
    }

    @Override
    public int hashCode() {
        return getStorage().hashCode();
    }

    @Override
    public boolean exists() {
        return true;
    }
}

(以上改编自org.eclipse.debug.internal.ui.views.console.ProcessConsole

您还必须提供自己的 IStorage 实现,实际上您应该实现 IEncodedStorage,它扩展 IStorage 以包含字符编码。

注意部分编辑可能看不懂IStorageEditorInput.