L'API JDT consente ad altri plugin di eseguire l'assistente al codice o la selezione del codice su alcuni elementi Java. Gli elementi che consentono questa manipolazione devono implementare ICodeAssist.
Esistono due tipi di manipolazione:
Nel modello Java sono presenti due elementi che implementano questa interfaccia: IClassFile e ICompilationUnit. Il completamento di codice e la selezione di codice forniscono dei risultati per un file di classe solo se hanno un'origine collegata.
One way to programmatically perform code completion is to invoke ICodeAssist.codeComplete. Nell'unità di compilazione viene specificato l'offset dopo il quale si desidera eseguire il completamento del codice. You must also supply an instance of CompletionRequestor to accept the possible completions.
The method in CompletionRequestor.accept accepts all kinds of proposals for code completion. The methods of CompletionProposal give information that describes the proposed element (its name, declaring type, etc.), la posizione proposta per l'inserimento nell'unità di compilazione e la relativa pertinenza.
A completion requestor can accept many different kinds of completions. This kind is given by CompletionProposal.getKind.
Some of the possible completion kinds are (The complete list of possible completion kinds can be seen on CompletionProposal):
Il richiedente di completamento deve essere inoltre in grado di accettare gli errori di compilazione.
Poiché i tipi di completamento possibili sono diversi, la nozione di pertinenza viene utilizzata per confrontare la pertinenza di un completamento consigliato con altre proposte. La pertinenza viene rappresentata da un numero intero positivo. Il valore non ha alcun significato implicito, eccetto il fatto di essere utilizzato in relazione ad altre proposte. La pertinenza di un possibile completamento di codice, essendo correlata ai tipi presenti nel codice circostante, ad esempio i tipi di variabile, i tipi di cast, i tipi di restituzione e così via, può essere influenzata dal tipo di espressione previsto. Anche la presenza di un prefisso o suffisso in un completamento influenza la relativa pertinenza.
Il plugin principale di JDT definisce opzioni che controllano il comportamento del completamento di codice. Queste opzioni possono essere modificare da altri plugin.
Opzioni supplementari consentono di specificare prefissi e suffissi per nomi di completamento proposti per campi, campi statici, variabili locali e argomenti di metodo.
Per ulteriori informazioni sulle opzioni di assistente al codice e sui relativi valori predefiniti, consultare la sezione relativa alle opzioni di assistente al codice principale di JDT.
La selezione di codice viene utilizzata per ricercare l'elemento Java rappresentato da un intervallo di testo (in genere il testo selezionato) in un'unità di compilazione. Per eseguire in modo programmatico la selezione di codice, è necessario richiamare ICodeAssist.codeSelect. È necessario fornire il percorso dell'indice di inizio della selezione e la relativa lunghezza. 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.
Nell'esempio di seguito riportato, la selezione di codice viene richiamata per un'unità di compilazione.
// 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());
Quando per la lunghezza della selezione viene specificato 0, la selezione verrà calcolata mediante la ricerca di un token completo che racchiude l'offset specificato. Si consideri il seguente metodo di esempio:
public void fooMethod(Object) {
}