使用 ReadOnlyPDOMProvider 导入索引内容
Import of Index content with ReadOnlyPDOMProvider
本文介绍了如何生成和导入 PDOM 索引。
调用生成应用程序 GeneratePDOM
后,我得到了一个 pdom 文件 /home/sadik/eclipse-2019-06/eclipse/pdomExample.pdom
。但是我在导入文件时遇到问题。
生成的命令是这样的:
java -jar plugins/org.eclipse.equinox.launcher_1.5.400.v20190515-0925.jar -application "org.eclipse.cdt.core.GeneratePDOM" -target /home/sadik/eclipse-2019-06/eclipse/pdomExample.pdom -source /home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/ -id cdttest_01 -indexer org.eclipse.cdt.core.myfastIndexer
注意 target
和 source
参数。
为了测试导入,我写了一个 class 来实现 IReadOnlyPDOMProvider
public class MyReadOnlyPDOMProvider implements IReadOnlyPDOMProvider {
public MyReadOnlyPDOMProvider() {
System.out.println("PDOMProvider");
}
@Override
public boolean providesFor(ICProject project) throws CoreException {
return true;
}
@Override
public IPDOMDescriptor[] getDescriptors(ICConfigurationDescription config) {
final IPath fileBase = Path.fromOSString("/home/sadik/eclipse-2019-06/eclipse/");
final IPath projectBase = Path.fromOSString("/home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/");
return new IPDOMDescriptor[] { new IPDOMDescriptor() {
public IIndexLocationConverter getIndexLocationConverter() {
return new URIRelativeLocationConverter(URIUtil.toURI(projectBase));
}
public IPath getLocation() {
IPath path = fileBase.append("pdomExample.pdom");
return path;
}
}};
}
路径是否正确?我其实不知道这里应该返回什么位置。
我在我的插件 plugin.xml
的 CDT 扩展点 CIndex
中定义了 class:
<extension
point="org.eclipse.cdt.core.CIndex">
<ReadOnlyPDOMProvider
class="de.blub.plugin.MyReadOnlyPDOMProvider">
</ReadOnlyPDOMProvider>
</extension>
我正在测试这个文件 (/home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/tests/indexer/usage.cc
):
#include <declaration.h>
int main() {
int a = testThis();
}
当我右键单击 testThis()
并选择转到声明时,我希望转到 /home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/tests/indexer/declaration.h
中的函数声明。这两个文件位于同一目录中。
但是会发生这样的情况,即打开一个带有空文件的编辑器。小编还告诉我路径:/home/soezoguz/rtt-plugin-runtime-2019-06/tests/indexer/declaration.h
.
路径中缺少项目名称。所以我猜 pdom 文件存储在指定源目录下的位置。我如何告诉 PDOMProvider 查看索引文件的正确目录?
出于某种原因,尾随的“/”已被 URIUtil.toURI(...)
省略。但是在 URIRealtiveLocationConverter
的描述中说
Note: The supplied base URI must end with a forward slash
所以我从字符串创建了一个 URI 实例,并在字符串中附加了一个“/”。
@Override
public IPDOMDescriptor[] getDescriptors(ICConfigurationDescription config) {
final IPath fileBase = Path.fromOSString("/home/sadik/eclipse-2019-06/eclipse/");
final IPath projectBase = config.getProjectDescription().getProject().getFullPath();
return new IPDOMDescriptor[] { new IPDOMDescriptor() {
public IIndexLocationConverter getIndexLocationConverter() {
URI baseURI;
try {
baseURI = new URI(projectBase.toString()+"/");
return new URIRelativeLocationConverter(baseURI);
} catch (URISyntaxException e) {
e.printStackTrace();
}
baseURI = URIUtil.toURI(projectBase);
return new URIRelativeLocationConverter(URIUtil.toURI(projectBase));
}
public IPath getLocation() {
IPath path = fileBase.append("pdomExample.pdom");
return path;
}
}};
}
本文介绍了如何生成和导入 PDOM 索引。
调用生成应用程序 GeneratePDOM
后,我得到了一个 pdom 文件 /home/sadik/eclipse-2019-06/eclipse/pdomExample.pdom
。但是我在导入文件时遇到问题。
生成的命令是这样的:
java -jar plugins/org.eclipse.equinox.launcher_1.5.400.v20190515-0925.jar -application "org.eclipse.cdt.core.GeneratePDOM" -target /home/sadik/eclipse-2019-06/eclipse/pdomExample.pdom -source /home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/ -id cdttest_01 -indexer org.eclipse.cdt.core.myfastIndexer
注意 target
和 source
参数。
为了测试导入,我写了一个 class 来实现 IReadOnlyPDOMProvider
public class MyReadOnlyPDOMProvider implements IReadOnlyPDOMProvider {
public MyReadOnlyPDOMProvider() {
System.out.println("PDOMProvider");
}
@Override
public boolean providesFor(ICProject project) throws CoreException {
return true;
}
@Override
public IPDOMDescriptor[] getDescriptors(ICConfigurationDescription config) {
final IPath fileBase = Path.fromOSString("/home/sadik/eclipse-2019-06/eclipse/");
final IPath projectBase = Path.fromOSString("/home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/");
return new IPDOMDescriptor[] { new IPDOMDescriptor() {
public IIndexLocationConverter getIndexLocationConverter() {
return new URIRelativeLocationConverter(URIUtil.toURI(projectBase));
}
public IPath getLocation() {
IPath path = fileBase.append("pdomExample.pdom");
return path;
}
}};
}
路径是否正确?我其实不知道这里应该返回什么位置。
我在我的插件 plugin.xml
的 CDT 扩展点 CIndex
中定义了 class:
<extension
point="org.eclipse.cdt.core.CIndex">
<ReadOnlyPDOMProvider
class="de.blub.plugin.MyReadOnlyPDOMProvider">
</ReadOnlyPDOMProvider>
</extension>
我正在测试这个文件 (/home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/tests/indexer/usage.cc
):
#include <declaration.h>
int main() {
int a = testThis();
}
当我右键单击 testThis()
并选择转到声明时,我希望转到 /home/sadik/my-plugin-runtime-2019-06/CDTTest_Local/tests/indexer/declaration.h
中的函数声明。这两个文件位于同一目录中。
但是会发生这样的情况,即打开一个带有空文件的编辑器。小编还告诉我路径:/home/soezoguz/rtt-plugin-runtime-2019-06/tests/indexer/declaration.h
.
路径中缺少项目名称。所以我猜 pdom 文件存储在指定源目录下的位置。我如何告诉 PDOMProvider 查看索引文件的正确目录?
出于某种原因,尾随的“/”已被 URIUtil.toURI(...)
省略。但是在 URIRealtiveLocationConverter
的描述中说
Note: The supplied base URI must end with a forward slash
所以我从字符串创建了一个 URI 实例,并在字符串中附加了一个“/”。
@Override
public IPDOMDescriptor[] getDescriptors(ICConfigurationDescription config) {
final IPath fileBase = Path.fromOSString("/home/sadik/eclipse-2019-06/eclipse/");
final IPath projectBase = config.getProjectDescription().getProject().getFullPath();
return new IPDOMDescriptor[] { new IPDOMDescriptor() {
public IIndexLocationConverter getIndexLocationConverter() {
URI baseURI;
try {
baseURI = new URI(projectBase.toString()+"/");
return new URIRelativeLocationConverter(baseURI);
} catch (URISyntaxException e) {
e.printStackTrace();
}
baseURI = URIUtil.toURI(projectBase);
return new URIRelativeLocationConverter(URIUtil.toURI(projectBase));
}
public IPath getLocation() {
IPath path = fileBase.append("pdomExample.pdom");
return path;
}
}};
}