Eclipse JDT:如何获取Java内容辅助的数据模型

时间:2015-12-16 19:50:40

标签: java eclipse eclipse-rcp eclipse-jdt

在Eclipse IDE上编写Java代码时,按 Control + Space 将弹出内容辅助窗口。
例如,System.的内容辅助窗口将列出类System的所有可用字段和方法。

我需要访问"数据模型"对于内容辅助窗口的代码 使用上面的示例,它是:给定类名System,如何检索所有可用的字段和方法?
我在grepcode.com上花了一些时间在这三个类的源代码上:

org.eclipse.jdt.ui.text.java.JavaContentAssistInvocationContext
org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer
org.eclipse.jdt.ui.text.java.CompletionProposalCollector

看起来ICompilationUnit实例用于提供字段和方法名称。

然后我不明白如何为jre系统库或第三方库中的类生成ICompilationUnit实例?或者如果我没有以正确的方式读取代码,那么程序如何找到字段和方法的名称? (我不需要担心偏移和UI的问题,只需要担心数据模型和#34;部分)。

2 个答案:

答案 0 :(得分:1)

似乎唯一的选择是创建一个(临时)编译单元,这又需要一个正确设置的Java项目。 基础结构是JDT知道使用哪个JRE,使用哪个编译器设置等所必需的。

请参阅here如何设置Java项目,以及here如何获取编译单元。

编译单元看起来像

class Foo {
  void bar() {
    java.lang.System.
  }
}

codeComplete()必须使用偏移量来调用,该偏移量表示System.之后的位置。

答案 1 :(得分:0)

您可以尝试使用java reflection API获取此特定班级的所有成员(YourClass.getMethods()YourClass.getDeclaredMethods())。

要根据您的输入使其动态化,您可以使用Class.forName(<fullClassName>)获取相应的课程(有关详情,请参阅this post)。

您可能遇到的问题是您必须提供完整的合格类名,因此您可能必须检查导入以找出您必须在哪个包中搜索相应的类,但这是唯一的方法这种方法 简单名称并不总是唯一的,因此不适合这种搜索(解释here