IntelliJ IDEA bővítmények írása

1. Bemutatkozás

Az elmúlt néhány évben a JetBrains IntelliJ-je gyorsan a legjobb fejlesztői IDE lett. Legutóbbi Java állapot jelentésünkben az IntelliJ volt a választott IDE a válaszadók 55% -ánál, szemben az előző évi 48% -kal.

Az egyik olyan szolgáltatás, amely annyira vonzóvá teszi az IntelliJ-t a Java fejlesztők számára, az a lehetőség, hogy bővítményekkel bővítheti és új funkciókat hozhat létre. Ebben az oktatóanyagban megvizsgáljuk az IntelliJ beépülő modul írását, hogy bemutassuk az IDE kiterjesztésének néhány módját.

És vegye figyelembe, hogy bár ez a cikk az IntelliJ beépülő modulokra összpontosít, az összes JetBrains IDE közös kóddal rendelkezik. Ebből kifolyólag, az itt alkalmazott technikák közül sok alkalmazható más JetBrain IDE-kre is mint például a PyCharm, a RubyMine és még sok más.

2. A beépülő modul funkciója

Az IntelliJ beépülő moduljának funkcionalitása általában a 4 kategória egyikébe tartozik:

  • Egyéni nyelvek: a különféle nyelveken írt kód írásának, értelmezésének és összeállításának képessége
  • Keretek: olyan harmadik fél keretrendszereinek támogatása, mint a tavasz
  • Eszközök: integráció olyan külső eszközökkel, mint a Gradle
  • A felhasználói felület kiegészítői: új menüpontok, eszközablakok és gombok és egyebek

A beépülő modulok gyakran több kategóriába sorolhatók. Például az IntelliJ-vel együtt szállított Git plugin kölcsönhatásba lép a rendszerre telepített git futtatható programmal. A beépülő modul biztosítja az eszközablakot és a felugró menüelemeket, ugyanakkor integrálódik a projekt létrehozásának munkafolyamatába, a beállítások ablakába és egyebekbe is.

3. Plugin létrehozása

Az IntelliJ beépülő modulok használatának legegyszerűbb módja a Plugin DevKit használata. Ez elérhető a Új >Projekt menü:

Ne feledje, hogy JetBrains JDK-t kell használnunk annak biztosítása érdekében, hogy a szükséges plugin osztályok elérhetőek legyenek az osztályúton. Az IntelliJ-nek alapértelmezés szerint megfelelő JDK-val kell rendelkeznie, de ha nem, innen letölthetünk egyet.

Az írás kezdetén csak a Java 8-at használhatjuk az IntelliJ bővítmények írásához. Ennek oka, hogy a JetBrains jelenleg nem biztosít hivatalos JDK-t Java 9 vagy újabb verzióhoz.

4. Példa beépülő modulra

Az IntelliJ beépülő modul írásának bemutatásához létrehozunk egy beépülő modult, amely gyors hozzáférést biztosít a népszerű Stack Overflow webhelyhez az IDE több területéről. Hozzáadjuk:

  • Az Eszközök menüpont segítségével keresse fel a Kérdés feltevése oldalt
  • Egy felugró menüelem mind a szövegszerkesztőben, mind a konzol kimenetében megkeresheti a kiemelt szöveget a Túlcsordulásban.

4.1. Műveletek létrehozása

A műveletek az IntelliJ bővítmények írásakor használt fő összetevők. A műveleteket az IDE eseményei váltják ki, például egy menüpontra vagy az eszköztár gombra kattintva.

A művelet létrehozásának első lépése egy kiterjesztő Java osztály létrehozása Egy bevetés. A Stack Overflow bővítményünkhöz 2 műveletet hozunk létre.

Az első művelet megnyitja a Kérdés feltevése oldalt egy új böngészőablakban:

public class AskQuestionAction kiterjeszti az AnAction {@Override public void actionPerformed (AnActionEvent e) {BrowserUtil.browse ("// stackoverflow.com/questions/ask"); }}

A beépítettet használjuk BrowserUtil osztály, mert kezeli a weblap különböző operációs rendszereken és böngészőkben történő megnyitásának minden árnyalatát.

A második művelet megnyitja a Verem túlcsordulás keresési oldalát, és lekérdezési karakterláncként továbbítja a keresési szöveget. Ezúttal két módszert alkalmazunk.

Az első módszer, amelyet megvalósítunk, pont olyan, mint az első műveletünk, és kezeli a webböngésző megnyitását.

Először azonban két értéket kell összegyűjtenünk a StackOverflow számára. Az egyik a nyelvi címke, a másik pedig a keresendő szöveg.

A nyelvi címke megszerzéséhez a Program Structure Interface-t fogjuk használni. Ez az API elemzi a projekt összes fájlját, és programozott módon biztosítja azok ellenőrzését.

Ebben az esetben a PSI-t használjuk a fájl programozási nyelvének meghatározásához:

PsiFile fájl = e.getData (CommonDataKeys.PSI_FILE); Nyelv lang = e.getData (CommonDataKeys.PSI_FILE) .getLanguage (); String languageTag = "+ [" + lang.getDisplayName (). ToLowerCase () + "]";

Ne feledje, hogy a PSI nyelvspecifikus részleteket is tartalmaz egy fájlról. Például, használhatnánk a PSI-t, hogy megtaláljuk az összes nyilvános módszert egy Java osztályban.

A keresni kívánt szöveg használatához a Szerkesztő API a kijelölt szöveg lekéréséhez a képernyőn:

végső szerkesztő szerkesztő = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); String selectedText = caretModel.getCurrentCaret (). GetSelectedText ();

Annak ellenére, hogy ez a művelet mind a szerkesztő, mind a konzol ablakban megegyezik, a kiválasztott szöveg elérése ugyanúgy működik.

Most mindezt össze tudjuk rakni egy actionPerformed nyilatkozat:

@Orride public void actionPerformed (AnActionEvent e) {PsiFile file = e.getData (CommonDataKeys.PSI_FILE); Nyelv lang = e.getData (CommonDataKeys.PSI_FILE) .getLanguage (); String languageTag = "+ [" + lang.getDisplayName (). ToLowerCase () + "]"; Szerkesztőszerkesztő = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); Karakterlánc kiválasztvaText = caretModel.getCurrentCaret (). GetSelectedText () Karakterlánc lekérdezése = selectedText.replace ('', '+') + languageTag; BrowserUtil.browse ("// stackoverflow.com/search?q=" + lekérdezés); } 

Ez a művelet felülír egy második elnevezett módszert is frissítés. Ez lehetővé teszi számunkra a művelet engedélyezését vagy letiltását különböző feltételek mellett.

Ebben az esetben letiltjuk a keresési műveletet, ha nincs kiválasztott szöveg:

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

4.2. Műveletek regisztrálása

Miután megírtuk a tetteinket, regisztrálnunk kell őket az IDE-nél. Ennek kétféle módja van.

Az első módszer a plugin.xml fájl, amelyet akkor hozunk létre, amikor új projektet indítunk.

Alapértelmezés szerint a fájl üres lesz elem, amelyhez hozzáadjuk a tetteinket:

Az XML fájl használata a műveletek regisztrálásához biztosítja, hogy az IDE indításakor regisztráljanak, ami általában előnyösebb.

A műveletek regisztrálásának második módja a ActionManager osztály:

ActionManager.getInstance (). RegisterAction ("StackOverflow.SearchAction", új SearchAction ());

Ennek az az előnye, hogy dinamikusan regisztrálhatjuk a műveleteket. Például, ha egy beépülő modult írunk egy távoli API-val való integrációhoz, akkor érdemes egy másik műveletkészletet regisztrálni az API általunk hívott verziója alapján.

Ennek a megközelítésnek az a hátránya, hogy az indításkor a műveletek nem regisztrálódnak. Létre kell hoznunk a ApplicationComponent műveletek kezelése, amely több kódolást és XML-konfigurációt igényel.

5. A beépülő modul tesztelése

Mint minden programnál, az IntelliJ bővítmény írásához is tesztelni kell. Egy olyan kis pluginhoz, mint amilyet írtunk, elegendő annak biztosítása, hogy a plugin leforduljon, és hogy az általunk létrehozott műveletek a várakozásoknak megfelelően működjenek, amikor rájuk kattintunk.

Plugin futtatási konfigurációjával manuálisan tesztelhetjük (és hibakereshetjük) a beépülő modulunkat:

Ez elindítja az IntelliJ új példányát, aktiválva a beépülő modulunkat. Ez lehetővé teszi számunkra, hogy rákattintsunk az általunk létrehozott különböző menüelemekre, és biztosítsuk a megfelelő Stack Overflow oldalak megnyílását.

Ha hagyományosabb egységvizsgálatot szeretne végezni, az IntelliJ fejetlen környezetet biztosít az egységtesztek futtatásához. Teszteket írhatunk bármilyen tetszőleges keretrendszer segítségével, és a tesztek az IDE valós, gúnyolatlan komponenseinek felhasználásával futnak.

6. A beépülő modul telepítése

A DevKit plugin egyszerű módot kínál a beépülő modulok csomagolására, így telepíteni és terjeszteni tudjuk őket. Egyszerűen kattintson a jobb gombbal a beépülő modulra, és válassza a „Bővítménymodul előkészítése a telepítéshez” lehetőséget. Ez létrehoz egy JAR fájlt a projektkönyvtárban.

A létrehozott JAR fájl tartalmazza az IntelliJ-be való betöltéshez szükséges kódot és konfigurációs fájlokat. Telepítheti helyileg, vagy közzéteheti egy plugin tárolóban mások számára.

Az alábbi képernyőképen látható az egyik új Stack Overflow menüelem:

7. Következtetés

Ebben a cikkben kifejlesztettünk egy egyszerű plugint, amely csak néhányat emel ki arról, hogyan javíthatjuk az IntelliJ IDE-t.

Míg elsősorban műveletekkel dolgoztunk, az IntelliJ plugin SDK számos lehetőséget kínál az új funkciók hozzáadásához az IDE-hez. További olvasmányért olvassa el a hivatalos kezdési útmutatót.

Mint mindig, a bővítményminta teljes kódja megtalálható a GitHub-tárunkban.


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