Eclipse cdt Eclipse CDT:扩展点CIndexer的问题
问题1:我找不到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)中安装,尽管我看不到插件代码中的差异 更多详细信息: 我的索引器类:
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;
...
}