Корректная инициализация и получение настроек в плагине Eclipse на основе Xtext - PullRequest
6 голосов
/ 01 ноября 2011

Я пишу плагин 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 моя попытка получить предпочтение программно не удалась. Самое смешное, что я знаю, что мои предпочтения правильно сохранены путем проверки в окне настроек.

Я полагаю, что это проблема с областью предпочтений , как описано здесь и здесь , но я не могу понять, что я делаю неправильно в моем программном поиске значений предпочтений.

UPDATE

С тех пор я заметил, что когда я удаляю вызов setDefault(...) из метода init(), все работает совершенно корректно. То есть я могу устанавливать настройки через пользовательский интерфейс, перезагружать 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");
    }
}

Этот код выполняется, но по какой-то причине, когда я открываю окно настроек и нажимаю «Восстановить значения по умолчанию», поля просто не отображаются ... значения по умолчанию, которые я пытаюсь установить / инициализировать, похоже, не позволяют окно настроек, так что я снова застрял!

1 Ответ

5 голосов
/ 02 ноября 2011

Хорошо, я думаю, что решил свою проблему.Мне нужно было указать хранилище настроек в методе init() следующим образом:

package org.grammaticalframework.eclipse.ui.editor.preferences;
public class GFLanguageRootPreferencePage extends LanguageRootPreferencePage {
    ...
    @Override
    public void init(IWorkbench workbench) {
        setPreferenceStore(GFActivator.getInstance().getPreferenceStore());
    }
}

Мне действительно следовало бы прочитать статьи, на которые я ссылаюсь, более внимательно!

...