JDT API 允许其他插件对一些 Java 元素执行代码辅助或代码选择。允许此处理的元素应实现 ICodeAssist。
有两种处理方法:
在 Java 模型中,有两个元素实现此接口:IClassFile 和 ICompilationUnit。仅当类文件具有相连接的源时,代码补全和代码选择才回答该类文件的结果。
一种使用程序执行代码补全的方法是调用 ICodeAssist.codeComplete。您指定编译单元中的偏移量,从而在此偏移量之后请求代码补全。还必须提供 CompletionRequestor 的实例才能接受可能的补全。
CompletionRequestor.accept 中的方法接受所有类型的代码补全建议。CompletionProposal 中的方法提供用于描述所建议的元素(它的名称和声明类型等)、它在编译单元中的建议插入位置以及它的相关性的信息。
补全请求者可以接受许多不同类型的补全。此类型由 CompletionProposal.getKind 提供。
可能的一些补全类型包括(可以在 CompletionProposal 中看到完整的可能补全类型列表):
补全请求者还必须能够接受编译错误。
因为可能有许多不同的可能补全,所以,相关性的概念用来比较建议的补全与其他建议的相关性。相关性由正整数表示。除非相对于其他建议的值使用,否则值没有隐式含义。代码补全候选的相关性可能受表达式的预期类型影响,这是因为它与周围代码中的类型(如变量类型、强制类型转型类型以及返回类型等)相关。存在于补全中的预期前缀或后缀也会影响补全的相关性。
JDT 核心插件定义了用于控制代码补全行为的选项。其他插件可以更改这些选项。
附加选项允许您为字段、静态字段、局部变量和方法参数的建议补全名称指定前缀和后缀。
有关代码辅助选项及其缺省值的更多信息,请参阅 JDT 核心代码辅助选项。
代码选择用来查找由编译单元中的一定范围的文本(通常是选择的文本)表示的 Java 元素。要使用程序来执行代码选择,必须调用 ICodeAssist.codeSelect。必须提供所选内容的开始索引位置及其长度。结果是 Java 元素的数组。大多数情况下,数组中只有一个元素,但是如果选择是有歧义的,则会返回所有可能的元素。
在以下示例中,为编译单元调用了代码选择。
// Get the compilation unit
ICompilationUnit unit = ...;
// Get the offset and length
int offset = ...;
int length = ...;
// perform selection
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("the selected element is " + element[0].getElementName());
当选择长度指定为 0 时,将通过查找包含指定偏移量的整个标记来计算所选内容。考虑以下方法示例:
public void fooMethod(Object) {
}