Les API du JDT permettent à d'autres plug-ins d'exécuter l'assistant de code ou la sélection de code sur certains éléments Java. Les éléments autorisant cette manipulation implémentent ICodeAssist. Le modèle Java contient deux éléments implémentant cette interface : IClassFile et ICompilationUnit.
Il existe deux types de manipulation :
Remarque : le complément et la sélection renvoient des résultats pour un fichier de classe uniquement s'il est connecté à une source.
La seule façon de compléter le code via un programme est d'utiliser ICodeAssist.codeComplete. Indiquez l'emplacement du complément dans l'unité et fournissez une instance de ICompletionRequestor pour accepter les compléments possibles.
Chaque type de proposition est accepté par une méthode du demandeur. Les paramètres de ces méthodes décrivent l'élément (nom, paramètres, type de déclaration...) et sa position, ainsi que la pertinence de la proposition dans le contexte.
Lorsque vous n'êtes pas intéressé par tous les types de résultats, utilisez simplement CompletionRequestorAdapter.
// Obtention de l'unité de compilation
ICompilationUnit unit = ...;
// Obtention du décalage
int offset = ...;
// Création du demandeur
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));
}
};
// Calcul des propositions
unit.codeComplete(offset, requestor);
Les options de complément de code peuvent être modifiées par d'autres plug-ins. Vous pouvez changer les options de l'API principale (core) du JDT pour modifier le comportement de complément.
Il existe deux options :
Pour savoir comment modifier les options de l'API principale (core) du JDT, consultez la rubrique Quelles sont les options de l'API principale (core) du JDT ?
Si vous voulez sélectionner du code via un programme, utilisez la méthode ICodeAssist.codeSelect. Elle doit connaître l'emplacement de début de la sélection et sa longueur.
Le résultat prend la forme d'un tableau d'éléments Java. La plupart du temps, le tableau ne contient qu'un élément, mais si la sélection est ambiguë, tous les éléments possibles sont renvoyés.
// 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 est égale à 0, elle est calculée avec le jeton de conteneur complet.
public void fooMethod(Object) { }Lorsque le décalage se situe après le premier caractère de fooMethod et si la longueur est 0, la sélection est fooMethod. En revanche, si la longueur est 5, la sélection est ooMet.