L'API JDT consente ad altri plug-in l'esecuzione di codeassist o codeselect su alcuni elementi Java. Gli elementi che consentono questa manipolazione implementano ICodeAssist. Nel modello Java sono presenti due elementi che implementano questa interfaccia: IClassFile e ICompilationUnit.
Esistono due tipi di manipolazione:
Nota: il completamento e la risposta della selezione determinano un file di classe solo se è presente un'origine associata.
L'unico modo per eseguire il completamento di codice in modo programmatico consiste nell'utilizzare ICodeAssist.codeComplete. Specificare il percorso del completamento nell'unità e fornire un'istanza di ICompletionRequestor per l'accettazione dei possibili completamenti.
Ciascun tipo di proposta viene accettata da un metodo del richiedente. I parametri di tali metodi descrivono l'elemento (nome, parametri, tipo di dichiarazione e così via) e la relativa posizione e la pertinenza della proposta nel contesto corrente.
Quando non si è interessati ai tipi di risultati, un modo semplice di eseguire il completamento del codice consiste nell'utilizzare CompletionRequestorAdapter.
// Ottenere l'unità di compilazione
ICompilationUnit unit = ...;
// Ottenere l'offset
int offset = ...;
// Creare il richiedente
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));
}
};
// Elaborare proposte
unit.codeComplete(offset, requestor);
Altri plug-in possono modificare le opzioni del completamento del codice. E possibile modificare le opzioni del nucleo di JDT per cambiare il comportamento del completamento.
Sono disponibili due opzioni:
Per informazioni su come modificare le opzioni del nucleo di JDT, vedere: Le opzioni del nucleo di JDT
Il metodo da utilizzare per l'esecuzione della selezione di codice in modo programmatico è ICodeAssist.codeSelect. E necessario che tale metodo conosca la posizione iniziale e la lunghezza della selezione.
Il risultato è una matrice di elementi Java. Per la maggior parte del tempo, nella matrice è presente un unico elemento ma, se la selezione è ambigua, vengono restituiti tutti gli elementi possibili.
// Ottenere l'unità di compilazione
ICompilationUnit unit = ...;
// Ottenere l'offset e la lunghezza
int offset = ...;
int length = ...;
// eseguire la selezione
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("the selected element is " + element[0].getElementName());
Se la lunghezza della selezione corrisponde a 0, la selezione verrà elaborata con il token di inclusione completo.
public void fooMethod(Object) { }Quando l'offset si trova dopo il primo carattere di fooMethod e la lunghezza è 0, la selezione sarà fooMethod. Se, invece, la lunghezza è 5, la selezione sarà ooMet.