【问题标题】:Eclipse RCP: How to access internal classes of plugins?Eclipse RCP:如何访问插件的内部类?
【发布时间】:2010-11-25 04:10:57
【问题描述】:

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

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

所以,我的问题是:还有其他方法可以访问插件的类吗?如果是,如何? 欢迎提供任何方法的教程、文档页面或有用的链接。

【问题讨论】:

    标签: eclipse eclipse-plugin eclipse-rcp


    【解决方案1】:

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

    要在运行时访问插件,您必须创建和扩展点以及附加到它的扩展到您尝试访问的插件中。

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

    因此,最好的解决方案是从 CVS 存储库中获取插件源,并直接在插件源中进行修改。添加扩展点、扩展和功能代码。

    教程:

    【讨论】:

      【解决方案2】:

      我最终像这样扩展了 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;
          }
      }
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 2016-06-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-31
        • 1970-01-01
        相关资源
        最近更新 更多