7
votes

Ajouter un modèle de code Java programmatiquement

J'aime quand Eclipse me permet de sauter entre les paramètres dans un appel de méthode à l'aide d'une touche TAB. Je voudrais que mon plugin fournisse une fonctionnalité similaire. Pour être précis, j'injecte un peu de texte dans l'éditeur et je voudrais mettre en évidence la syntaxe spécifique et laisser le programmateur passer à la correspondance suivante à l'aide de la touche TAB.

Voici un exemple. Permet de supposer que j'ai créé dynamiquement l'extrait suivant: xxx

Je vais injecter cela dans l'éditeur et j'aimerais que [?] est mis en surbrillance et prêt Pour la modification (l'utilisateur peut taper longueur () ). De plus, s'il y a plus de fragments [?] , j'aimerais que l'utilisateur utilise l'onglet pour passer à la suivante.

Après avoir recherché un peu, j'ai trouvé que cela pourrait être fait en utilisant Modèles . Cependant, je ne trouve aucun exemples pertinents sur le Web. Quelqu'un a-t-il de l'expérience avec cela?

MISE À JOUR:

J'ai trouvé deux liens qui pourraient être utiles, bien que je ne puisse toujours pas trouver un Solution.

Link One < / a>

lien deux


0 commentaires

3 Réponses :


1
votes

Je ne suis pas totalement sûr de ce que vous voulez, mais vous pourrez peut-être faire ce que vous voulez avec des modèles.

Par exemple, ouvrez un éditeur Java, placez le curseur à l'intérieur d'une méthode, tapez Arraya Puis CTLR-Space et sélectionnez ArrayAjouter dans le menu contextuel. Vous obtiendrez un modèle avec une chaîne mise en surbrillance, appuyant sur onglet saute à la variable suivante. La source de modèle peut être vue dans, p>

Préférences -> Java -> Editeur -> Modèles P>

${array_type}[] ${result:newName(array)} = new ${array_type}[${array}.length + 1];
System.arraycopy(${array}, 0, ${result}, 0, ${array}.length);
${result}[${array}.length]= ${var};


4 commentaires

Oui, voici comment fonctionne les modèles. Cependant, je développe un plugin qui créera des extraits de code sur l'exécution. J'essaie de savoir comment utiliser, si possible, utiliser des modèles API afin que l'utilisateur puisse modifier et naviguer entre des espaces réservés. Y a-t-il encore plus d'informations que vous voudriez que je donne?


Le meilleur pari est de suivre la source du plug-in de modèle et de voir comment cela fonctionne alors.


Avez-vous vérifié org.eclipse.jface.text.templates.templateproposal? Et si vous souhaitez insérer un extrait sans utiliser de contenu, vous pouvez inspecter la méthode Templateproposal # Appliquer également.


J'injecte mon extrait dans l'éditeur dans l'éditeur d'un emplacement spécifique sans utiliser de contenu d'assistance. Cela semble vraiment prometteur. Si vous pouviez donner un exemple de code dans une réponse, je l'accepterai.



8
votes

code manutention des échantillons: xxx

résultat:

Entrez la description de l'image ici

Je vous suggère d'utiliser org.eclipse.jdt.ui.javacompletionproposalcomputer extension. Cela vous permet de contribuer à la manière légale.

Dans mes codes, il y a des hacks car il n'y a aucun moyen d'obtenir isourceviewer légalement. Je sais isourceviewer est itextTargeoperer lui-même, mais ce n'est pas une API (casting illégal). Et le modèle est destiné à être conçu pour être utilisé par templateCompétionProcesseur ou templateCompétionpompactorproroposal .


0 commentaires

0
votes

Ma réponse est basée sur la réponse de Jeeyeul. La différence est que je voulais non seulement le modèle lui-même, mais également les importations pour qu'elle soit résolue et ajoutée automatiquement. Cela peut être fait de manière à suivre, à l'aide de JDT Stuff: xxx


0 commentaires