Я пишу плагин Eclipse, используя Xtext 2. Я предоставил свои собственные предпочтения, написав свой собственный класс 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");
}
}
и привязать его к модулю пользовательского интерфейса как обычно:
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 ()
, все работает полностью правильно. То есть я могу без проблем устанавливать предпочтения через пользовательский интерфейс, перезагружать Eclipse и получать эти значения программно.
Итак, теперь проблема заключается в том, что мне нужно найти правильное место для моего вызова setDefault (...)
. Основываясь на этой же статье , я расширил точку расширения следующим образом:
и с классом реализации:
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");
}
}
Этот код выполняется, но по какой-то причине, когда я открываю свои настройки и нажмите «Восстановить значения по умолчанию», поля просто станут пустыми ... значения по умолчанию, которые я пытаюсь установить / инициализировать, похоже, не попадают в окно настроек, поэтому я снова застрял!