La API de JDT permite a otros conectores ejecutar codeassist o codeselect en algunos elementos Java. Los elementos que permiten esta manipulación implementan la interfaz ICodeAssist. En el modelo Java existen dos elementos que implementan esta interfaz: IClassFile y ICompilationUnit.
Existen dos tipos de manipulación:
Nota: la respuesta de conclusión y selección sólo dan como resultado un archivo de clase si tienen fuente conectado.
La única forma de realizar programáticamente la conclusión de código es utilizar ICodeAssist.codeComplete. Se especifica la ubicación de la conclusión en la unidad y se suministra una instancia de ICompletionRequestor para aceptar las finalizaciones posibles.
Un método del solicitante acepta cada uno de los tipos de propuesta . Los parámetros de estos métodos describen el elemento (nombre, parámetros, tipo declarante...) y su posición, así como la relevancia de la propuesta en el contexto actual.
Si no está interesado en todos los tipos de resultados, una forma sencilla de realizar la conclusión de código es utilizar CompletionRequestorAdapter.
// Obtener la unidad de compilación
ICompilationUnit unit = ...;
// Obtener el desplazamiento
int offset = ...;
// Crear el solicitante
ICompletionRequestor requestor = new CompletionRequestorAdapter() {
public void acceptClass(
char[] packageName,
char[] className,
char[] completionName,
int modifiers,
int completionStart,
int completionEnd,
int relevance) {
System.out.println("proponer una clase denominada " + new String(className));
}
};
// Calcular propuestas
unit.codeComplete(offset, requestor);
Otros conectores pueden cambiar las opciones de conclusión de código. Puede modificar las opciones del Núcleo de JDT para cambiar el comportamiento de conclusión.
Existen dos opciones:
Para saber cómo modificar las opciones del Núcleo de JDT, consulte el apartado: Qué son las opciones del Núcleo de JDT
Si desea realizar programáticamente la selección de código, el método que debe utilizar es ICodeAssist.codeSelect. Este método necesita saber la ubicación inicial de la selección y la longitud.
El resultado es una matriz de elementos Java. La mayor parte del tiempo, sólo existe un elemento en la matriz, pero si la selección es ambigua, se devuelven todos los elementos posibles.
// Obtener la unidad de compilación
ICompilationUnit unit = ...;
// Obtener el desplazamiento y la longitud
int offset = ...;
int length = ...;
// realizar selección
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("el elemento seleccionado es " + element[0].getElementName());
Si la longitud de la selección es igual a 0, ésta se calcula con el elemento completo.
public void fooMethod(Object) { }Si el desplazamiento es posterior al primer carácter de fooMethod y la longitud es 0, la selección es fooMethod. Pero si la longitud es 5, la selección es ooMet.