Zápis doplnkov IntelliJ IDEA

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 55% respondentov, oproti 48% v predchádzajúcom roku.

Jednou z funkcií, vďaka ktorej je IntelliJ tak príťažlivý pre vývojárov Java, je schopnosť rozširovať a vytvárať nové funkcie pomocou doplnkov. V tomto výučbe sa pozrieme na písanie doplnku IntelliJ, aby sme demonštrovali niekoľko spôsobov rozšírenia IDE.

Upozorňujeme, že zatiaľ čo sa tento článok zameriava na doplnky IntelliJ, všetky IDE JetBrains zdieľajú spoločný kód. Preto mnoho z tu použitých techník sa dá aplikovať na iné IDE JetBrain napríklad PyCharm, RubyMine a ďalšie.

2. Funkčnosť doplnku

Funkčnosť doplnku pre IntelliJ zvyčajne spadá do jednej zo 4 kategórií:

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

Pluginy často spadajú do viacerých kategórií. Napríklad plugin Git, ktorý sa dodáva s IntelliJ, interaguje s spustiteľným súborom git nainštalovaným 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. Vytvorenie doplnku

Najjednoduchší spôsob, ako začať s doplnkami IntelliJ, je použitie ich doplnkov DevKit. To je prístupné z Nový >Projekt Ponuka:

Upozorňujeme, že musíme použiť JetBrains JDK aby ste sa uistili, že sú v triede k dispozícii požadované triedy doplnkov. IntelliJ by mal byť štandardne dodávaný s vhodným JDK, ale ak nie, môžeme si jeden odtiaľto stiahnuť.

Od tohto písania Java 8 môžeme používať iba na písanie doplnkov IntelliJ. Je to preto, že JetBrains v súčasnosti neposkytuje oficiálny JDK pre Java 9 alebo novšiu.

4. Príklad doplnku

Na demonštráciu písania doplnku IntelliJ vytvoríme doplnok, ktorý poskytuje rýchly prístup k obľúbenému webu Stack Overflow z viacerých oblastí v prostredí IDE. Pridáme:

  • 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í

Akcie sú hlavným komponentom používaným na zápis doplnkov IntelliJ. 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 2 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, pretože zvláda všetky nuansy otvárania webovej stránky v rôznych operačných systémoch a prehľadávačoch.

Druhá akcia otvorí stránku hľadania pretečenia zásobníka a odovzdá hľadaný text ako reťazec dotazu. Tentokrát implementujeme dve metódy.

Prvá metóda, ktorú implementujeme, je ako naša prvá akcia a zaoberá sa otváraním webového prehliadača.

Najprv však musíme zhromaždiť dve hodnoty pre StackOverflow. Jedným z nich je jazyková značka a druhým text, ktorý sa má vyhľadať.

Na získanie jazykovej značky použijeme rozhranie štruktúry programu. 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:

Súbor PsiFile = e.getData (CommonDataKeys.PSI_FILE); Jazyk lang = e.getData (CommonDataKeys.PSI_FILE) .getLanguage (); Reťazec languageTag = "+ [" + lang.getDisplayName (). ToLowerCase () + "]";

Upozorňujeme, že PSI poskytuje aj podrobnosti týkajúce sa súboru týkajúce sa konkrétneho jazyka. Napríklad, mohli by sme použiť PSI na nájdenie všetkých verejných metód v triede Java.

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

final 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 (AnActionEvent e) {PsiFile file = e.getData (CommonDataKeys.PSI_FILE); Jazyk lang = e.getData (CommonDataKeys.PSI_FILE) .getLanguage (); Reťazec languageTag = "+ [" + lang.getDisplayName (). ToLowerCase () + "]"; Editor editor = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); Reťazec selectedText = caretModel.getCurrentCaret (). GetSelectedText () Reťazec query = selectedText.replace ('', '+') + languageTag; BrowserUtil.browse ("// stackoverflow.com/search?q=" + dopyt); } 

Táto akcia tiež prepíše druhú metódu s názvom aktualizovať. To nám umožňuje povoliť alebo zakázať akciu za rôznych podmienok.

V takom prípade deaktivujeme hľadanie, keď nie je vybraný text:

@Override public void update (AnActionEvent e) {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ť) pomocou konfigurácie spustenia doplnku:

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 chcete vykonať tradičnejšie testovanie jednotiek, IntelliJ poskytuje bezhlavé prostredie na vykonávanie testov jednotiek. 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

Plugin DevKit poskytuje jednoduchý spôsob balenia doplnkov, aby sme ich mohli nainštalovať a distribuovať. Jednoducho kliknite pravým tlačidlom myši na projekt doplnku a vyberte možnosť „Pripraviť modul doplnku na nasadenie“. Takto sa vygeneruje súbor JAR v adresári projektu.

Vygenerovaný súbor JAR obsahuje kód a konfiguračné súbory potrebné na načítanie do IntelliJ. Môžete ho nainštalovať lokálne alebo publikovať 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 iba niektoré z toho, ako môžeme vylepšiť IntelliJ IDE.

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

Celý kód nášho vzorového pluginu nájdete ako vždy v našom úložisku GitHub.