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 ».

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.

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.

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.

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.

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.

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.)