Eclipse特定于自然的项目属性

时间:2014-01-21 21:17:41

标签: eclipse eclipse-plugin

我正在开发一个具有自定义项目性质的Eclipse插件。大自然本身运作良好。我需要实现一个特定于项目的属性页面,允许用户自定义特定于该性质的设置;到目前为止,我一直没有成功,会给予任何帮助。我设想这类似于Java本质如何允许人们设置特定于项目的编译器选项,格式化设置等。

项目设置存储在项目本身中至关重要,类似于(project root)/.settings/org.eclipse.jdt.*.prefs中Java设置的存储方式。这些需要在该项目的源代码控制中,因此整个团队都要遵守相同的标准。

以下是我目前在plugin.xml中的内容:

  <extension point="org.eclipse.ui.propertyPages">
    <page id="test.MyOverlayPage"
          name="%Key.PropertyPage"
          class="test.MyOverlayPage">
      <enabledWhen>
        <instanceof value="org.eclipse.core.resources.IProject"/>
      </enabledWhen>
    </page>
  </extension>

这显然不会像Java设置那样限制属性页面,但是目前这不会出现在任何项目中,更不用说具有自定义性质的项目了。

我发现以下问题没有解决我的具体问题:

Create our own property page for project explorer eclipse plugin

Eclipse: Storing info in .project file

我还发现了这个Eclipse帮助页面,这个页面严重缺乏细节,而且我无法在此基础上运行:

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.isv%2Fguide%2FresInt_properties.htm

2 个答案:

答案 0 :(得分:5)

Java属性页使用此:

<enabledWhen>
    <adapt type="org.eclipse.core.resources.IProject">
        <test property="org.eclipse.core.resources.projectNature" 
              value="org.eclipse.jdt.core.javanature"/>
    </adapt>         
</enabledWhen>

这使用adapt而不是instanceof,因为视图中的UI对象通常不是项目(或其他资源)的实例。相反,他们使用IAdapterManager将UI类转换(适应)到工作区模型类。

test元素添加了对项目性质的测试,这里是Java自然ID,但您可以替换自然ID。

要在项目.settings中保存首选项,请使用以下内容:

IProject project =  ... get project from selection or something

IScopeContext context = new ProjectScope(project);

Preferences projectPreferences = context.getNode("your nature id");

projectPreferences.put(key, value);

projectPreferences.flush();

答案 1 :(得分:1)

如果您的页面是org.eclipse.ui.dialogs.PropertyPage的扩展名,您可以通过以下方式获取项目:

private IProject getProject() {
   final IAdaptable adaptable = getElement();
   return adaptable == null ? null : (IProject) adaptable.getAdapter(IProject.class);
}