Zápis doplnkov IntelliJ IDEA pomocou programu Gradle

1. Úvod

Za posledných pár rokov sa IntelliJ od JetBrains rýchlo stal top IDE pre vývojárov Java. V našej najnovšej správe o stave Java bol IntelliJ IDE voľbou pre 61% respondentov, oproti 55% v predchádzajúcom roku.

Jednou z funkcií, vďaka ktorej je IntelliJ pre vývojárov Java tak príťažlivý, je schopnosť rozširovať a vytvárať nové funkcie pomocou doplnkov.

V tomto výučbe sa pozrieme na písanie doplnku IntelliJ pomocou nového odporúčaného spôsobu v Gradle, aby sme demonštrovali niekoľko spôsobov, ako môžeme rozšíriť IDE. Tento článok je zmesou predchádzajúceho, ktorý popisuje vytvorenie rovnakého doplnku pomocou doplnku Devkit.

2. Hlavné typy doplnkov

Medzi najbežnejšie typy doplnkov patria funkcie pre:

  • Podpora vlastného jazyka: schopnosť písať, tlmočiť a kompilovať kód napísaný v rôznych jazykoch
  • Rámcová integrácia: podpora rámcov tretích strán, ako je Spring
  • Integrácia nástroja: integrácia s externými nástrojmi, ako je Gradle
  • Doplnky používateľského rozhrania: nové položky ponuky, okná nástrojov, ukazovatele priebehu a ďalšie

Pluginy často spadajú do viacerých kategórií. Napríklad doplnok Git, ktorý sa dodáva s IntelliJ, interaguje s git spustiteľný súbor nainštalovaný v systéme. Plugin poskytuje svoje okno nástroja a položky rozbaľovacej ponuky a súčasne sa integruje do pracovného toku vytvárania projektu, okna preferencií a ďalších.

3. Vytvorte doplnok

Existujú dva podporované spôsoby vytvárania doplnkov. Namiesto nových pluginov Devkit použijeme odporúčaný spôsob pre nové projekty s Gradle.

Vytvorenie pluginu založeného na Gradle sa deje pomocou Nové> Projekt Ponuka.

Upozorňujeme, že musíme zahrnúť Java a IntelliJ Platform Plugin aby ste sa uistili, že sú v triede k dispozícii požadované triedy doplnkov.

Od tohto písania na zápis pluginov IntelliJ môžeme použiť iba JDK 8.

4. Príklad doplnku

Vytvoríme doplnok, ktorý poskytuje rýchly prístup k obľúbenému webu Stack Overflow z viacerých oblastí v prostredí IDE. Bude obsahovať:

  • položka ponuky Nástroje na návštevu stránky Spýtať sa na otázku
  • položka rozbaľovacej ponuky vo výstupe textového editora aj konzoly na vyhľadanie zvýrazneného textu v Stack Overflow

4.1. Vytváranie akcií

Najbežnejším spôsobom prístupu k doplnku sú akcie. Akcie sa spúšťajú udalosťami v IDE, napríklad kliknutím na položku ponuky alebo na paneli nástrojov.

Prvým krokom pri vytváraní akcie je vytvorenie rozšírenej triedy Java Akcia. Pre náš doplnok Stack Overflow vytvoríme dve akcie.

Prvá akcia otvorí stránku Opýtať sa na otázku v novom okne prehliadača:

verejná trieda AskQuestionAction rozširuje AnAction {@Override public void actionPerformed (AnActionEvent e) {BrowserUtil.browse ("// stackoverflow.com/questions/ask"); }}

Používame zabudované BrowserUtil triedy na zvládnutie všetkých odtieňov otvárania webovej stránky v rôznych operačných systémoch a prehľadávačoch.

Na vykonanie vyhľadávania na StackOverflow potrebujeme dva parametre: jazykovú značku a text, ktorý chceme vyhľadať.

Na získanie jazykovej značky použijeme rozhranie PSI (Program Structure Interface). Toto API analyzuje všetky súbory v projekte a poskytuje programový spôsob ich kontroly.

V takom prípade použijeme PSI na určenie programovacieho jazyka súboru:

Voliteľný psiFile = Voliteľný.ofNullable (e.getData (LangDataKeys.PSI_FILE)); String languageTag = psiFile.map (PsiFile :: getLanguage) .map (Language :: getDisplayName) .map (String :: toLowerCase) .map (lang -> "[" + lang + "]") .orElse ("") ;

Na vyhľadanie textu použijeme Editor API na načítanie zvýrazneného textu na obrazovke:

Editor editor = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); Reťazec selectedText = caretModel.getCurrentCaret (). GetSelectedText ();

Aj keď je táto akcia rovnaká pre okná editora aj konzoly, prístup k vybratému textu funguje rovnako.

Teraz to môžeme všetko spojiť do actionPerformed vyhlásenie:

@Override public void actionPerformed (@NotNull AnActionEvent e) {voliteľné psiFile = voliteľné.ofNullable (e.getData (LangDataKeys.PSI_FILE)); String languageTag = psiFile.map (PsiFile :: getLanguage) .map (Language :: getDisplayName) .map (String :: toLowerCase) .map (lang -> "[" + lang + "]") .orElse ("") ; Editor editor = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); Reťazec selectedText = caretModel.getCurrentCaret (). GetSelectedText (); BrowserUtil.browse ("// stackoverflow.com/search?q=" + languageTag + selectedText); }

Táto akcia tiež prepíše druhú metódu s názvom aktualizovať, čo nám umožňuje povoliť alebo zakázať akciu za rôznych podmienok. V takom prípade deaktivujeme hľadanie, ak nie je vybraný text:

Editor editor = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); e.getPresentation (). setEnabledAndVisible (caretModel.getCurrentCaret (). hasSelection ());

4.2. Registrácia akcií

Keď už máme napísané naše akcie, musíme ich zaregistrovať na IDE. Existujú dva spôsoby, ako to urobiť.

Prvý spôsob je použitie plugin.xml súbor, ktorý sa pre nás vytvorí pri začatí nového projektu.

V predvolenom nastavení bude mať súbor prázdny prvok, do ktorého pridáme naše akcie:

Použitie súboru XML na registráciu akcií zabezpečí, že sa zaregistrujú počas spustenia IDE, čo je zvyčajne výhodnejšie.

Druhým spôsobom registrácie akcií je programové použitie súboru ActionManager trieda:

ActionManager.getInstance (). RegisterAction ("StackOverflow.SearchAction", nová SearchAction ());

To má tú výhodu, že nám umožňuje dynamicky registrovať akcie. Napríklad, ak napíšeme doplnok na integráciu so vzdialeným API, možno budeme chcieť zaregistrovať inú množinu akcií na základe verzie API, ktorú voláme.

Nevýhodou tohto prístupu je, že akcie sa neregistrujú pri štarte. Musíme vytvoriť inštanciu ApplicationComponent na správu akcií, ktoré si vyžadujú viac kódovania a konfigurácie XML.

5. Testovanie doplnku

Rovnako ako v každom programe, aj pri písaní doplnku IntelliJ je potrebné vyskúšať. Pre malý doplnok, ako je ten, ktorý sme napísali, stačí zabezpečiť kompiláciu doplnku a to, že akcie, ktoré sme vytvorili, fungujú podľa očakávania, keď na ne klikneme.

Náš doplnok môžeme manuálne otestovať (a odladiť) otvorením okna nástroja Gradle a vykonaním príkazu runIde úloha:

Týmto sa spustí nová inštancia IntelliJ s aktivovaným našim doplnkom. To nám umožňuje kliknúť na rôzne položky ponuky, ktoré sme vytvorili, a zabezpečiť, aby sa otvorili správne stránky Stack Overflow.

Ak by sme chceli vykonať tradičnejšie testovanie jednotiek, IntelliJ poskytuje bezhlavé prostredie na vykonávanie jednotkových testov. Testy môžeme písať pomocou ľubovoľného testovacieho rámca, ktorý chceme, a testy prebiehajú pomocou skutočných, nezapojených komponentov z IDE.

6. Nasadenie doplnku

Gradle Plugin poskytuje jednoduchý spôsob balenia doplnkov, aby sme ich mohli nainštalovať a distribuovať. Jednoducho otvorte okno nástroja Gradle a vykonajte príkaz buildPlugin úloha. Týmto sa vygeneruje súbor ZIP vo vnútri súboru build / distribúcie adresár.

Vygenerovaný súbor ZIP obsahuje kód a konfiguračné súbory potrebné na načítanie do IntelliJ. Môžeme ho nainštalovať lokálne alebo zverejniť v úložisku doplnkov na použitie inými.

Screenshot nižšie zobrazuje jednu z nových položiek ponuky Stack Overflow v akcii:

7. Záver

V tomto článku sme vyvinuli jednoduchý doplnok, ktorý zdôrazňuje, ako môžeme vylepšiť IntelliJ IDE.

Aj keď primárne pracujeme s akciami, IntelliJ plugin SDK ponúka niekoľko spôsobov, ako pridať do IDE nové funkcie. Ďalšie informácie nájdete v ich oficiálnej príručke Začíname.

Celý kód nášho vzorového doplnku nájdete ako vždy na GitHub.


$config[zx-auto] not found$config[zx-overlay] not found