L'API JDT permet aux autres plug-ins d'effectuer une assistance à la saisie de code ou une sélection de code sur certains éléments Java. Les éléments autorisant cette manipulation doivent implémenter ICodeAssist.
Il existe deux types de manipulation :
Le modèle Java contient deux éléments implémentant cette interface : IClassFile et ICompilationUnit. L'exécution et la sélection de code ne renvoient les résultats correspondants à un fichier classe que s'il est connecté à une source.
Une méthode d'exécution du code par programme consiste à appeler ICodeAssist.codeComplete. Vous spécifiez le décalage dans l'unité de génération selon lequel le code doit être exécuté. Vous devez également fournir une instance de CompletionRequestor pour accepter les exécutions possibles.
La méthode contenue dans CompletionRequestor.accept accepte toutes les catégories de propositions d'exécution du code. Les méthodes de CompletionProposal fournissent des informations décrivant l'élément proposé (son nom, type déclarant, etc.), la position proposée pour son insertion dans l'unité de génération et sa pertinence.
Un demandeur d'exécution (Completion Requestor) peut accepter plusieurs catégories d'exécution différentes. Cette catégorie est indiquée par CompletionProposal.getKind.
Certaines catégories d'exécution possibles sont (pour obtenir la liste complète des catégories d'exécution possibles, voir CompletionProposal) :
Le demandeur d'exécution doit également être en mesure d'accepter les erreurs de compilation.
Du fait qu'il peut y avoir de nombreuses exécutions différentes possibles, la notion de pertinence est utilisée pour comparer la pertinence d'une exécution suggérée par rapport à d'autres propositions.La pertinence est représentée par un entier positif.La valeur n'a aucune signification explicite, si ce n'est qu'elle doit être utilisée en fonction de la valeur d'autres propositions.La pertinence d'un candidat d'exécution de code peut être affectée par le type d'expression attendu, du fait qu'il est lié aux types du code environnant, tels que les types de variable, les types de transtypage, les types de retour, etc. La présence d'un préfixe ou d'un suffixe attendu dans une exécution affecte également sa pertinence.
Le plug-in de l'API principale JDT définit des options qui contrôlent le comportement d'exécution du code.Ces options peuvent être modifiées par d'autres plug-ins.
Des options supplémentaires permettent de spécifier les préfixes et les suffixes des noms d'exécution proposés pour les zones, les zones statiques, les variables locales et les arguments de méthode.
Pour plus d'informations sur les options de l'assistant de code et leurs valeurs par défaut, voir Options de l'assistant de code de l'API principale JDT.
La sélection de code permet de rechercher l'élément Java représenté par une plage de texte (généralement le texte sélectionné) dans une unité de compilation.Pour effectuer une sélection de code par programme, vous devez appeler ICodeAssist.codeSelect. Vous devez fournir l'emplacement de départ de l'index de la sélection et sa longueur. Le résultat est matérialisé par un tableau d'éléments Java. La plupart du temps, le tableau ne contient qu'un seul élément, mais si la sélection est ambiguë, tous les éléments possibles sont renvoyés.
Dans l'exemple suivant, la sélection de code est appelée pour une unité de compilation.
// Obtention de l'unité de compilation
ICompilationUnit unit = ...;
// Obtention du décalage et de la longueur
int offset = ...;
int length = ...;
// Exécution de la sélection
IJavaElement[] elements = unit.codeSelect(offset, length);
System.out.println("the selected element is " + element[0].getElementName());
Si la longueur de la sélection a pour valeur 0, une sélection est calculée en recherchant le jeton complet qui enferme le décalage spécifié.Considérons l'exemple de méthode suivant :
public void fooMethod(Object) {
}