DéveloppeurWeb.Com
    DéveloppeurWeb.Com
    • Agile Zone
    • AI Zone
    • Cloud Zone
    • Database Zone
    • DevOps Zone
    • Integration Zone
    • Web Dev Zone
    DéveloppeurWeb.Com
    Home»Integration Zone»Premiers pas avec le développement de plugins pour les IDE JetBrains comme IntelliJ et GoLand
    Integration Zone

    Premiers pas avec le développement de plugins pour les IDE JetBrains comme IntelliJ et GoLand

    novembre 22, 2022
    Premiers pas avec le développement de plugins pour les IDE JetBrains comme IntelliJ et GoLand
    Share
    Facebook Twitter Pinterest Reddit WhatsApp Email

    Quelle que soit votre formation technique en tant que développeur, vous avez probablement rencontré ou même utilisé un IDE de JetBrains. Leur gamme de produits comprend des IDE pour différents langages et technologies et ils sont tous construits selon le même schéma : au-dessus d’un noyau extensible (« plate-forme IntelliJ ») se trouve un ensemble d’extensions organisées qui fournit toutes les fonctionnalités « intégrées » de l’IDE. .

    Et si vous pouviez étendre davantage votre IDE avec vos propres plugins ? Faire votre propre plugin pour vos flux de travail peut améliorez considérablement votre productivité. Dans cet article, nous allons explorer l’API IntelliJ et créer un plugin simple étape par étape pour vous aider à démarrer.

    Le plugin que nous sommes sur le point de développer s’appelle « Google This » et il fournit un élément de menu contextuel pour rechercher le texte en surbrillance sur Google.

    Conditions préalables

    Les plugins IntelliJ s’exécutent sur la machine virtuelle Java (« JVM »), ils sont donc naturellement écrits dans un langage compatible JVM. Les API du plugin sont les mieux adaptées pour Java et Kotlin. Nous utiliserons Java dans cet article de blog. Pour le développement lui-même, nous utiliserons l’édition communautaire d’IntelliJ IDEA.

    Commencer

    Première, créons notre projet. L’assistant de création de projet dans IntelliJ IDEA fournit un modèle appelé « IDE Plugin » qui démarre un plugin vide construit au-dessus de Gradle. Assurez-vous que « Java » est sélectionné et choisissez le JDK installé sur votre système dans la liste déroulante « JDK ».

    La "Nouveau projet" assistant avec le "Plug-in IDE" modèle en surbrillance

    Après avoir cliqué sur « Créer », nous sommes accueillis avec un échafaudage de tout ce dont nous avons besoin pour écrire et exécuter notre plugin vide sur IntelliJ.

    Structure de fichier initiale d'un plugin.

    Exécuter et déboguer le plugin

    Notre projet utilise Gradle. L’assistant de création de projet a créé pour nous un ensemble de tâches Gradle qui sont disponibles dans le panneau « Gradle » à droite.

    Panneau Gradle montrant un tas de tâches liées au développement de plugins ;  La "runIde" tâche est sélectionnée.

    Cliquer sur ces tâches Gradle affiche les tâches liées à l’exécution, aux tests, à la signature et à la distribution, mais seules quelques-unes d’entre elles sont vraiment pertinentes pour les opérations quotidiennes. Pour l’instant, nous n’aurons besoin que de runIde tâche, qui démarre une nouvelle instance d’IntelliJ IDEA avec notre plugin chargé.

    Mais nous n’avons même pas besoin de jouer avec ce panneau tout le temps. Le modèle de projet comprend une configuration d’exécution appelée « Run Plugin » qui nous permet d’utiliser les boutons « Exécuter » et « Déboguer » dans la barre d’outils en haut à droite pour exécuter le runIde tâche.

    Exécutez les configurations déroulantes avec le "Exécuter le plug-in" configuration sélectionnée à côté de "Courir" et "Déboguer" boutons.

    Créer l’action du menu contextuel

    Pour utiliser notre plugin, nous devons implémenter une soi-disant « action ». Les actions sont des commandes dans IntelliJ qui peuvent être déclenchées via le menu contextuel, le coureur d’action (CtrlDécalageUN) ou un raccourci clavier personnalisé, selon leur configuration.

    Créons une classe appelée GoogleThis dans le com.example.demo paquet et faites-le étendre le AnAction classer.

    package com.example.demo;
    
    import com.intellij.openapi.actionSystem.AnAction;
    import com.intellij.openapi.actionSystem.AnActionEvent;
    import org.jetbrains.annotations.NotNull;
    
    public class GoogleThis extends AnAction {
        @Override
        public void actionPerformed(@NotNull AnActionEvent e) {
    
        }
    }
    

    En l’état, cela ne fait encore rien. Pour qu’IntelliJ sache que nous écoutons les événements susmentionnés, nous devons enregistrer notre action dans le plugin.xml dossier. Ce fichier contient des métadonnées générales sur un plugin ainsi que des déclarations de ce que le plugin contribue aux classes d’implémentation pertinentes.

    Vous pouvez ajouter votre déclaration d’action à la main, mais dans IntelliJ, nous pouvons également simplement survoler le nom de la classe et cliquer sur « Enregistrer l’action » pour enregistrer notre classe dans le plugin.xml dossier.

    Mouseover-popup sur le "GoogleCeci" nom de la classe affichant un lien cliquable intitulé "Enregistrer une action".

    Le nom sous lequel l’entrée doit être affichée est « Google, s’il vous plaît ! » EditorPopupMenu définit où cette action doit vivre et nous l’avons ancrée en dernier, donc elle est toujours affichée en bas. Enfin, nous attribuons le raccourci clavier CtrlAutreg à notre action.

    "Nouvelle action" assistant dans IntelliJ avec le nom de la classe "com.example.demo.GoogleThis" définir comme valeur pour "Identifiant de l'action" et "Nom du cours", "Google cela s'il vous plaît !" définir comme valeur pour "Nom", "EditorPopupMenuEditorPopupMenu" mis en évidence dans "Groupes", "Dernier" mis en évidence dans "Ancre" et "Ctrl+Alt+G" définir comme valeur pour "Raccourcis clavier > Premier". » title= »"Nouvelle action" assistant dans IntelliJ avec le nom de la classe "com.example.demo.GoogleThis" définir comme valeur pour "Identifiant de l’action" et "Nom du cours", "Google cela s’il vous plaît !" définir comme valeur pour "Nom", "EditorPopupMenuEditorPopupMenu" mis en évidence dans "Groupes", "Dernier" mis en évidence dans "Ancre" et "Ctrl+Alt+G" définir comme valeur pour "Raccourcis clavier > Premier". » class= »fr-fic fr-dib lazyload » data-src= »https://symflower.com/en/company/blog/2022/getting-started-with-intellij-plugin-development/images/action-wizard.png »/><br />
 </figure>
<p>Après avoir ajouté l’action via l’assistant, nous pouvons vérifier que tout fonctionne, même si aucune implémentation n’a encore été effectuée, en exécutant le plugin et en vérifiant le menu contextuel.  Cliquez simplement sur le bouton « Exécuter » dans le coin supérieur droit et ouvrez n’importe quel projet dans la nouvelle instance IDE.  Ouvrez ensuite n’importe quel fichier et cliquez avec le bouton droit pour faire apparaître le menu contextuel.</p>
<figure> <img decoding=

    Jusqu’ici tout va bien!

    Implémenter la fonctionnalité

    Avec notre action enregistrée, nous pouvons cliquer sur son élément de menu contextuel, mais rien ne se passe lorsque nous le faisons car son implémentation est encore complètement vide. Ce qui devrait arriver, c’est que le plugin lit le texte sélectionné, puis construit une URL vers Google et ouvre un navigateur avec cela. Un bon endroit pour commencer à rechercher les bonnes interfaces à utiliser lorsque vous travaillez sur un plugin est la documentation du SDK du plugin IntelliJ Platform. À défaut, il existe également IntelliJ Platform Explorer pour rechercher les utilisations réelles des API dans les plugins open source.

    Dans ce cas, nous utilisons le CaretModel de l’éditeur, comme décrit dans la documentation de la page « Système de coordonnées de l’éditeur ». Positions et décalages. L’invocation du navigateur est possible à l’aide d’une méthode utilitaire dans BrowserUtil.

    @Override
    public void actionPerformed(@NotNull AnActionEvent e) {
        final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
        final CaretModel caretModel = editor.getCaretModel();
        String selectedText = caretModel.getCurrentCaret().getSelectedText();
    
        BrowserUtil.browse("https://www.google.com/search?q="+selectedText);
    }
    

    Et avec cela, nous avons un élément de menu contextuel de travail qui recherche le texte en surbrillance sur Google. Mais il y a maintenant un bogue où vous pouvez utiliser le menu contextuel même si vous n’aviez pas de texte en surbrillance qui chercherait simplement null. Pour éviter cela, nous pourrait vérifier si selectedText est null et ne rien faire, ou nous pouvons utiliser le update méthode de la AnAction class pour masquer entièrement le menu contextuel.

     @Override
    public void update(AnActionEvent e) {
        final Editor editor = e.getRequiredData(CommonDataKeys.EDITOR);
        final CaretModel caretModel = editor.getCaretModel();
        e.getPresentation().setEnabledAndVisible(caretModel.getCurrentCaret().hasSelection());
    }
    

    Maintenant le Google this please! l’élément de menu contextuel n’est pas visible si aucun texte n’est sélectionné.





    Conclusion

    Et c’est tout. Félicitations, vous venez d’écrire votre premier plugin IntelliJ IDEA ! Ce plugin ne fonctionnera pas uniquement sur IntelliJ IDEA — presque tous les IDE JetBrains s’appuient sur la plate-forme IntelliJ, de sorte que vos plugins peuvent être installés dans chacun d’eux ! (À condition qu’ils ne dépendent d’aucune fonctionnalité exclusive.)

    Share. Facebook Twitter Pinterest LinkedIn WhatsApp Reddit Email
    Add A Comment

    Leave A Reply Cancel Reply

    Catégories

    • Politique de cookies
    • Politique de confidentialité
    • CONTACT
    • Politique du DMCA
    • CONDITIONS D’UTILISATION
    • Avertissement
    © 2023 DéveloppeurWeb.Com.

    Type above and press Enter to search. Press Esc to cancel.