我正在使用 Xtext 2 编写一个 Eclipse 插件。我通过编写自己的RootPreferencePage
类提供了自己的偏好:
package org.grammaticalframework.eclipse.ui.editor.preferences;
import org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage;
public class GFLanguageRootPreferencePage extends LanguageRootPreferencePage {
@Override
protected void createFieldEditors() {
addField(new StringFieldEditor("PREF", "&Label:", getFieldEditorParent()));
}
@Override
public void init(IWorkbench workbench) {
getPreferenceStore().setDefault("PREF", "default-value");
}
}
并像往常一样将其绑定在 UI 模块中:
public Class<? extends org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage> bindLanguageRootPreferencePage() {
return org.grammaticalframework.eclipse.ui.editor.preferences.GFLanguageRootPreferencePage.class;
}
这很好用;我可以保存首选项,关闭并重新打开 Eclipse,再次转到首选项窗口并查看我保存的值。但是问题是当我尝试以编程方式检索首选项值时。我使用以下代码:
IPreferencesService prefs = Platform.getPreferencesService();
String s = prefs.getString(QUALIFIER, "PREV", "fallback", null);
当停留在同一个 Eclipse 实例中时,这可以正常工作,但是在重新启动 Eclipse 后,我尝试以编程方式检索首选项失败。有趣的是,我知道通过检查首选项窗口可以正确保存我的首选项。
我想这是这里和这里描述的首选项范围的问题,但我无法弄清楚我在以编程方式检索首选项值时做错了什么。
更新
从那以后我注意到,当我setDefault(...)
从init()
方法中删除对的调用时,事情完全正常。也就是说,我可以通过 UI 设置首选项,重新加载 Eclipse,并以编程方式检索这些值而不会出现问题。
所以问题现在变成了我需要找到正确的位置来调用setDefault(...)
. 基于同一篇文章,我扩展了``扩展点如下:
<extension point="org.eclipse.core.runtime.preferences">
<initializer
class="org.grammaticalframework.eclipse.ui.editor.preferences.GFPreferenceInitializer">
</initializer>
</extension>
并与实现类:
package org.grammaticalframework.eclipse.ui.editor.preferences;
public class GFPreferenceInitializer extends AbstractPreferenceInitializer {
@Override
public void initializeDefaultPreferences() {
IPreferenceStore store = GFActivator.getInstance().getPreferenceStore();
store.setDefault("PREV", "default-value");
}
}
这段代码正在执行,但由于某种原因,当我打开我的首选项窗口并单击“恢复默认值”时,这些字段只是空白..我试图设置/初始化的默认值似乎没有进入首选项窗口,所以我又被卡住了!