【发布时间】:2020-05-20 12:31:55
【问题描述】:
我正在按照找到的步骤here 尝试使用 LanguageSettingsProvider 扩展点将构建设置添加到现有 Eclipse CDT 项目中的文件,但我的设置提供程序似乎没有显示在 UI 中,并且它的方法不是t 查询设置。
我之前使用an external settings provider 成功将设置添加到项目,但我couldn't find a way to add file-specific settings。
我已经实现了 LanguageSettingsSerializableProvider 的子类(我们称之为 MyProvider),并将其添加到我的 plugin.xml 中:
<extension
point="org.eclipse.cdt.core.LanguageSettingsProvider">
<provider
class="com.example.MyProvider"
id="MyProvider_id"
name="I would like to see this in the UI">
<language-scope id="org.eclipse.cdt.core.gcc"/>
<language-scope id="org.eclipse.cdt.core.g++"/>
</provider>
</extension>
该类的实现大致如下:
public class MyProvider
extends LanguageSettingsSerializableProvider
implements ILanguageSettingsProvider,
IResourceChangeListener,
ILanguageSettingsEditableProvider,
ILanguageSettingsBroadcastingProvider {
/** The ID of this settings provider */
public static final String MY_PROVIDER_ID = "MyProvider_id"; //$NON-NLS-
/**
* Constructor. Initialises super class with appropriate values.
*/
public MyProvider() {
super( MY_PROVIDER_ID , Messages.UiLabel );
}
@Override
public String getId() {
return MY_PROVIDER_ID ;
}
@Override
public String getName() {
return Messages.UiLabel;
}
@Override
public List<ICLanguageSettingEntry> getSettingEntries(ICConfigurationDescription cfgDescription, IResource resource, String languageId) {
//breakpoint on this line that never gets hit...
return super.getSettingEntries( cfgDescription, resource, languageId );
}
...
}
真正的实现包含一些其他逻辑来实际创建设置条目,包括将自己注册为资源更改侦听器。 resourceChanged 代码工作正常,调用setSettingsEntries,然后调用serializeSettings。但是,永远不会调用 getSettingEntries 来获取这些设置。
我有什么遗漏吗?
我的猜测是 plugin.xml 缺少一些东西,但我不确定是什么。该类实现的各种接口中都有指导段落,但一个简单的工作示例价值超过一千字。我已经尝试查看内置设置提供程序的 xml(例如 GCCBuiltinCompilerSettingsMinGW),但它们是与 CDT 的许多其他部分一起定义的,很难判断哪些位与我的用例相关。
【问题讨论】:
标签: eclipse eclipse-plugin eclipse-cdt