为什么类通过自定义类路径容器添加到jar中而不能用于代码完成?

Mar*_*kus 12 java eclipse eclipse-plugin eclipse-jdt

通过代码完成中可见的自定义类路径容器提供的类是什么?

我已成功实现了一个自定义类路径容器,它将库添加到项目中.它将特定文件夹中的所有jar添加到构建路径,除非工作区中有一个具有相同名称的项目,在这种情况下引用项目.

现在这显然似乎有效,当我从其中一个jar中引用一个类时,代码编译,但我没有在代码完成建议中看到该类.当我在我的工作区中有正确的项目时,我在代码完成中看到了这样一个类.

我已经完成了以下步骤来实现这一目标,而我正在部分考虑IBM教程:

  • 实现ClasspathContainerInitializer
  • 实现ClasspathContainerPreferencePage以进行其他配置
  • 实现IClasspathContainer

当我将容器添加到项目中时,我会看到包浏览器中的jar,就像我预期的那样.(只有当没有相应的项目可用时,Jar才会出现,Logging会显示预期的结果)

我可以使用通过类路径容器集成的jar中没有编译器错误的类,它们不能用于代码完成,而在Quick Fixes中可以添加正确的导入.所以我想我可能只是错过了一些扩展点的贡献.

Mar*_*kus 1

答案基本上是:除了实现这三个部分之外,您不需要做任何其他事情。但你必须以正确的方式去做。

ClasspathContainerPreferencePage用于准备容器以将其添加到项目中

ClasspathContainer作为实体添加到项目中。对于这一点来说,正确实施所有需要的方法非常重要。对我来说,问题是我在方法getKind()中返回了错误的常量值。我不需要返回IClasspathEntry.CPE_CONTAINER我只需要使用IClasspathContainer.K_APPLICATION并且代码完成是开箱即用的:

public int getKind() {
    return IClasspathContainer.K_APPLICATION;
}
Run Code Online (Sandbox Code Playgroud)

最后是用于准备和更新容器的ClasspathContainerInitializer 。