JDT API 允许其它插件对一些 Java 元素执行代码辅助或代码选择。允许此处理的元素应实现 ICodeAssist。
有两种处理方法:
在 Java 模型中,有两个元素实现此接口:IClassFile 和 ICompilationUnit。仅当类文件具有相连接的源时,代码补全和代码选择才回答该类文件的结果。
使用程序执行代码补全的唯一方法是调用 ICodeAssist.codeComplete。您指定编译单元中的偏移量,从而在此偏移量之后请求代码补全。还必须提供 ICompletionRequestor 的实例才能接受可能的补全。
ICompletionRequestor 中的每个方法都接受不同类型的代码补全建议。每个方法的参数都包括用于描述所建议的元素(它的名称和声明类型等)、它在编译单元中的建议插入位置以及它的相关性的文本。
补全请求者可以接受许多不同类型的补全,包括插入下列元素:
补全请求者还必须能够接受编译错误。
如果插件并非对每种类型的代码补全都感兴趣,则可以使用 CompletionRequestorAdapter,以便只需实现感兴趣的补全类型。以下示例显示只用来接受类补全的适配器。
// Get the compilation unit ICompilationUnit unit = ...; // Get the offset int offset = ...; // Create the requestor ICompletionRequestor requestor = new CompletionRequestorAdapter() { public void acceptClass( char[] packageName, char[] className, char[] completionName, int modifiers, int completionStart, int completionEnd, int relevance) { System.out.println("propose a class named " + new String(className)); } }; // Compute proposals unit.codeComplete(offset, requestor);
因为可能有许多不同的可能补全,所以,相关性的概念用来比较建议的补全与其它建议的相关性。相关性由正整数表示。除非相对于其它建议的值使用,否则值没有隐式含义。代码补全候选的相关性可能受表达式的预期类型影响,这是因为它与周围代码中的类型(如变量类型、强制转型类型以及返回类型等)相关。存在于补全中的预期前缀或后缀也会影响补全的相关性。
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) {
}