Eclipse cdt Eclipse CDT:扩展点CIndexer的问题

Eclipse cdt Eclipse CDT:扩展点CIndexer的问题,eclipse-cdt,Eclipse Cdt,问题1:我找不到org.eclipse.cdt.core.index.IIndexer 从API: API信息:要扩展此扩展点的插件必须实现org.eclipse.cdt.core.index.IIndexer接口 API信息是否不正确/已弃用?如果不是IIndexer,应该实现哪个接口 问题2:我可以在CDT版本6.8(eclipse 2019-06)中安装我自己的索引器,但不能在版本6.5(eclipse 2018-09)中安装,尽管我看不到插件代码中的差异 更多详细信息: 我的索引器类:

问题1:我找不到
org.eclipse.cdt.core.index.IIndexer

从API:

API信息:要扩展此扩展点的插件必须实现org.eclipse.cdt.core.index.IIndexer接口

API信息是否不正确/已弃用?如果不是IIndexer,应该实现哪个接口

问题2:我可以在CDT版本6.8(eclipse 2019-06)中安装我自己的索引器,但不能在版本6.5(eclipse 2018-09)中安装,尽管我看不到插件代码中的差异

更多详细信息:

我的索引器类:

@SuppressWarnings("restriction")
public class MyIndexer extends PDOMFastIndexer {

    public static final String ID = "de.blub.MyIndexer";

    @Override
    public String getID() {
        return ID;
    }

    @Override
    public IPDOMIndexerTask createTask(ITranslationUnit[] added, ITranslationUnit[] changed,
        ITranslationUnit[] removed) {
    if (...) {
        return new MyIndexerTask(added, changed, removed, this, true);
    } else {
        return super.createTask(added, changed, removed);
    }

}
plugin.xml

<extension
     id="org.eclipse.cdt.core.fastIndexer"
     name="My Indexer"
     point="org.eclipse.cdt.core.CIndexer">
  <run
        class="de.blub.MyIndexer">
  </run>
两个cdt版本的代码相同
indexer
在eclipse 2018-09中成为
PDOMFastIndexer
,但在2019-06年成为
MyIndexer

我可以看到的一个区别是在
RegistryObjectManager

private Object basicGetObject(int id, byte type) {
    Object result = cache.get(id);
    if (result != null)
        return result;
    ...
}
id用于从
缓存
对象中获取正确的ConfigurationElement(
结果
),我不太了解它是如何构建的。但是,返回的ConfigurationElement包含一个字段
propertiesAnsValues
,在一种情况下是不正确的(
org.eclipse.cdt.internal.core.pdom.indexer.PDOMFastIndexer
,而不是
de.blub.MyIndexer

我如何在eclipse 2018-09中也使用自己的索引器来解决这个问题? 请注意我的问题1。因为如果API描述是正确的,这意味着我试图以错误的方式安装索引器,并且需要做一些事情来“查看”IIndexer接口。

根据,您需要派生的类是
IPDOMIndexer
(您已经在这样做了)。您还可以从引用的
PDOMManager
代码中看出这一点,该代码将
createExecutableExtension()
的结果强制转换为
IPDOMIndexer

(评论说使用
org.eclipse.cdt.core.index.IIndexer
确实过时了。简单看一下,该接口至少从2005年就不存在了。欢迎使用更新扩展点文档的补丁。)

至于您的第二个问题,我相信这是因为您正在使用
id=“org.eclipse.cdt.core.fastIndexer”
作为扩展,cdt的一个内置索引器已经在使用它。
id
需要唯一地标识您的扩展名(因此您可以将其设置为类似于
myproject.MyIndexer

private Object basicGetObject(int id, byte type) {
    Object result = cache.get(id);
    if (result != null)
        return result;
    ...
}