在运行时填充扩展点的元素属性

时间:2014-03-21 16:50:23

标签: eclipse eclipse-plugin

这是我的用例。我有一个编辑器,不同的插件可以用来显示他们的数据。这些插件可以创建(在用户向导的干预下)编辑器可以接受的不同文件:.p1,.p2等。每个插件都提供它生成的文件的文件扩展名,这些数据可通过自定义扩展点获得。我需要一种方法,如果可能的话,注射"此数据转换为 org.eclipse.ui.editors 扩展点扩展程序属性。

我考虑这样做的一种方法是在一个早期调用的插件中,从使用我的扩展点的所有插件中收集文件扩展名,并将这些值写入plugin.properties文件的关键字,如supportedFileExtension和扩展点org.eclipse.ui.editors将依次使用此文件:

 <extension
   point="org.eclipse.ui.editors">
<editor
      class="MyEditor"
      contributorClass="MyActionBarContributor"
      default="false"
      extensions="%supportedFileExtensions"
      id="my.com.editor"
      name="My Editor">
</editor>

我还看到了类ExtensionParameterValues这是我可以使用的东西,但对于可能想要重用这个小机制的开发人员来说,它可能不够明显,特别是当使用扩展属性时它是空的ExtensionParameterValues类。当然我可以把它放在文档中,但谁读到了,对吧? :)

也许我忽略了一些简单的事情,并且有一种更简单的方法可以做我想要完成的事情?

1 个答案:

答案 0 :(得分:1)

不是直接使用扩展,而是Eclipse内容类型可以执行此操作。首先定义基本内容类型:

<extension
     point="org.eclipse.core.contenttype.contentTypes">
  <content-type
        id="contenttype.base"
        name="Base content type"/>

然后,您的不同插件可以使用从基本类型派生的内容类型为其文件扩展名定义内容类型:

  <content-type
        base-type="contenttype.base"
        file-extensions="p1"
        id="contenttype.p1"
        name="P1 content type"/>

  <content-type
        base-type="contenttype.base"
        file-extensions="p2"
        id="contenttype.p2"
        name="P2 content type"/>

对于您的编辑器,请不要指定任何扩展名,而是使用contentTypeBinding作为基本类型:

<extension
   point="org.eclipse.ui.editors">
  <editor
     class="MyEditor"
     contributorClass="MyActionBarContributor"
     default="false"
     id="my.com.editor"
     name="My Editor">
   <contentTypeBinding
           contentTypeId="contenttype.base"/> 
   </editor>

现在,编辑器将用于基于基本内容类型的所有内容类型。