Eclipse RCP:如何访问内部插件类?

时间:2009-09-03 03:45:57

标签: eclipse eclipse-plugin eclipse-rcp

我想在RCP应用程序中使用Eclipse的默认XML编辑器(org.eclipse.wst.xml.ui)。我需要读取当前打开的xml文件的DOM。该插件不提供任何扩展点,所以我试图访问内部类。我知道我不应该访问内部类,但我没有其他选择。

我的方法是创建一个片段和一个扩展点,以便能够从插件中读取数据。我试图不重新编译插件,这就是为什么我认为片段是必要的。我只是想加载它并在运行时提取数据。

所以,我的问题是:是否有其他方式来访问插件的类?如果有,怎么样? 欢迎任何教程,文档页面或任何方法的有用链接。

2 个答案:

答案 0 :(得分:4)

由于没有人回答我的问题,经过长时间的搜索后我找到了答案,如果碰到这个问题,我会发布其他人的答案。

要在运行时访问插件,您必须创建和扩展点以及与您尝试访问的插件相关的扩展名。

如果要从插件外部访问这些类,建议不要使用片段向插件添加类。

因此,最好的解决方案是从CVS Repository获取插件源,并将修改直接转换为插件的源代码。添加扩展点,扩展和功能代码。

教程:

答案 1 :(得分:1)

我最终像这样扩展了XMLMultiPageEditorPart:

public class MultiPageEditor extends XMLMultiPageEditorPart implements
        IResourceChangeListener {

    @Override
    public void resourceChanged(IResourceChangeEvent event) {
        // TODO Auto-generated method stub
        setActivePage(3);
    }

    public Document getDOM() {
        int activePageIndex = getActivePage();

        setActivePage(1);
        StructuredTextEditor fTextEditor = (StructuredTextEditor) getSelectedPage();
        IDocument document = fTextEditor.getDocumentProvider().getDocument(
                fTextEditor.getEditorInput());
        IStructuredModel model = StructuredModelManager.getModelManager()
                .getExistingModelForRead(document);
        Document modelDocument = null;
        try {
            if (model instanceof IDOMModel) {
                // cast the structured model to a DOM Model
                modelDocument =  (Document) (((IDOMModel) model).getDocument());
            }
        } finally {
            if (model != null) {
                model.releaseFromRead();
            }
        }
        setActivePage(activePageIndex);
        return modelDocument;
    }
}

这不是一个干净的实现,但它可以完成工作。