Exécution de l'assistant de code sur le code Java

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.

Exécution de code

Exécution de code

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.  

Pertinence de l'exécution

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.

Options d'exécution de code

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.

Sélection de code

Exécution d'une sélection de code

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());

Sélection à l'emplacement du curseur

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) {
   }

Si vous spécifiez un décalage après le premier caractère de fooMethod et que vous indiquez une longueur de 0, la sélection sera calculée de façon à inclure le jeton complet fooMethod. En revanche, si vous spécifiez une longueur de 5, la sélection sera considéré comme étant ooMet.