6

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");
    }
}

このコードは実行されていますが、何らかの理由で設定ウィンドウを開いて[デフォルトに戻す]をクリックすると、フィールドが空白になります。設定/初期化しようとしているデフォルトが設定ウィンドウに表示されないようです。 、だから私はまた立ち往生しています!

4

1 に答える 1

5

わかりました、私は自分の問題を解決したと思います。init()次のように、メソッドでプリファレンスストアを指定する必要がありました。

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

リンクした記事をもっと注意深く読むべきだった!

于 2011-11-02T08:54:23.017 に答える