כתיבת תוספי IntelliJ IDEA

1. הקדמה

במהלך השנים האחרונות, IntelliJ מ- JetBrains הפכה במהרה ל- IDE המוביל עבור מפתחי Java. בדו"ח האחרון של מדינת ג'אווה, IntelliJ הייתה ה- IDE שנבחרה עבור 55% מהנשאלים, לעומת 48% אשתקד.

אחת התכונות שהופכות את IntelliJ למושכת כל כך עבור מפתחי Java היא היכולת להרחיב וליצור פונקציונליות חדשה באמצעות תוספים. במדריך זה נבחן כתיבת תוסף IntelliJ כדי להדגים כמה דרכים להרחבת ה- IDE.

ושימו לב שבעוד מאמר זה מתמקד בתוספי IntelliJ, כל ה- IDE של JetBrains חולקים קוד משותף. לָכֵן, רבים מהטכניקות המשמשות כאן ניתנות ליישום על IDE של JetBrain אחרים כגון PyCharm, RubyMine ועוד.

2. פונקציונליות תוסף

פונקציונליות פלאגין עבור IntelliJ נופלת בדרך כלל לאחת מארבע קטגוריות:

  • שפות מותאמות אישית: היכולת לכתוב, לפרש ולהרכיב קוד הכתוב בשפות שונות
  • מסגרות: תמיכה במסגרות של צד שלישי כגון אביב
  • כלים: אינטגרציה עם כלים חיצוניים כגון Gradle
  • תוספות ממשק משתמש: פריטי תפריט חדשים, חלונות וכפתורי כלים ועוד

תוספים ייכנסו לרוב למספר קטגוריות. לדוגמא, התוסף Git שנשלח עם IntelliJ, מתקשר עם הפעלת ה- git המותקנת במערכת. התוסף מספק את חלון הכלים שלו ואת פריטי התפריט הקופץ, תוך שילוב בתהליך העבודה של יצירת הפרויקט, חלון ההעדפות ועוד.

3. יצירת תוסף

הדרך הקלה ביותר להתחיל עם תוספי IntelliJ היא להשתמש ב- DevKit של התוסף שלהם. ניתן לגשת אליו מה- חָדָשׁ >פּרוֹיֶקט תַפרִיט:

שים לב שעלינו להשתמש ב- JDK של JetBrains כדי להבטיח ששיעורי התוספים הנדרשים זמינים בנתיב הכיתה. IntelliJ אמורה להגיע עם JDK מתאים כברירת מחדל, אך אם לא נוכל להוריד מכאן מכאן.

נכון לכתיבת שורות אלה, אנו יכולים להשתמש ב- Java 8 רק לצורך כתיבת תוספי IntelliJ. הסיבה לכך היא כי JetBrains אינו מספק כרגע JDK רשמי עבור Java 9 ומעלה.

4. תוסף לדוגמא

כדי להדגים כתיבת תוסף IntelliJ, ניצור תוסף המספק גישה מהירה לאתר Stack Overflow הפופולרי ממספר אזורים ב- IDE. נוסיף:

  • פריט בתפריט כלים לביקור בדף שאל שאלה
  • פריט בתפריט קופץ הן בעורך הטקסט והן בפלט המסוף לחיפוש הצפת Stack אחר טקסט מודגש.

4.1. יצירת פעולות

פעולות הן מרכיב הליבה המשמש לכתיבת תוספי IntelliJ. פעולות מופעלות על ידי אירועים ב- IDE, כגון לחיצה על פריט בתפריט או על כפתור סרגל הכלים.

השלב הראשון ביצירת פעולה הוא יצירת מחלקת Java שמתרחבת פעולה. עבור התוסף Stack Overflow שלנו, ניצור שתי פעולות.

הפעולה הראשונה פותחת את הדף שאל שאלה בחלון דפדפן חדש:

מחלקה ציבורית AskQuestionAction מרחיב את AnAction {@Override public void actionPerformed (AnActionEvent e) {BrowserUtil.browser ("// stackoverflow.com/questions/ask"); }}

אנו משתמשים במובנה BrowserUtil בכיתה מכיוון שהוא מטפל בכל הניואנסים של פתיחת דף אינטרנט במערכות הפעלה ודפדפנים שונים.

הפעולה השנייה פותחת את עמוד החיפוש Stack Overflow ומעבירה את טקסט החיפוש כמחרוזת שאילתה. הפעם נבצע שתי שיטות.

השיטה הראשונה שאנחנו מיישמים היא בדיוק כמו הפעולה הראשונה שלנו ומטפלת בפתיחת דפדפן אינטרנט.

ראשית, עם זאת, עלינו לאסוף שני ערכים עבור StackOverflow. האחד הוא תג השפה, והשני הוא הטקסט לחיפוש.

כדי לקבל את תג השפה, נשתמש בממשק מבנה התוכנית. ממשק API זה מנתח את כל הקבצים בפרויקט ומספק דרך תוכנתית לבדוק אותם.

במקרה זה אנו משתמשים ב- PSI כדי לקבוע את שפת התכנות של קובץ:

קובץ PsiFile = e.getData (CommonDataKeys.PSI_FILE); שפה lang = e.getData (CommonDataKeys.PSI_FILE) .getLanguage (); מחרוזת languageTag = "+ [" + lang.getDisplayName (). ToLowerCase () + "]";

שים לב שה- PSI מספק גם פרטים ספציפיים לשפה לגבי קובץ. לדוגמה, נוכל להשתמש ב- PSI כדי למצוא את כל השיטות הציבוריות בשיעור Java.

כדי לקבל את הטקסט לחיפוש, נשתמש ב- עוֹרֵך ממשק API לאחזור טקסט מודגש על המסך:

עורך סופי של עורך = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); מחרוזת selectedText = caretModel.getCurrentCaret (). GetSelectedText ();

למרות שפעולה זו זהה גם לחלונות העורך וגם לחלונות המסוף, הגישה לטקסט שנבחר פועלת באותה צורה.

עכשיו, נוכל להרכיב את כל זה פעולה בוצעה הַצהָרָה:

@ עקירה פעולה בטלה ציבורית מבוצעת (AnActionEvent e) {PsiFile file = e.getData (CommonDataKeys.PSI_FILE); שפה lang = e.getData (CommonDataKeys.PSI_FILE) .getLanguage (); מחרוזת languageTag = "+ [" + lang.getDisplayName (). ToLowerCase () + "]"; עורך עורך = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); מחרוזת selectedText = caretModel.getCurrentCaret (). GetSelectedText () שאילתת מחרוזת = selectText.replace ('', '+') + languageTag; BrowserUtil.browser ("// stackoverflow.com/search?q=" + שאילתה); } 

פעולה זו עוקפת גם שיטה שנייה בשם עדכון. זה מאפשר לנו לאפשר או להשבית את הפעולה בתנאים שונים.

במקרה זה, אנו משביתים את פעולת החיפוש כשאין טקסט שנבחר:

@ עקוב על עדכון הריק הציבורי (AnActionEvent e) {עורך העורך = e.getRequiredData (CommonDataKeys.EDITOR); CaretModel caretModel = editor.getCaretModel (); e.getPresentation (). setEnabledAndVisible (caretModel.getCurrentCaret (). hasSelection ()); } 

4.2. רישום פעולות

ברגע שכתבנו את הפעולות שלנו, עלינו לרשום אותם ב- IDE. ישנן שתי דרכים לעשות זאת.

הדרך הראשונה היא שימוש ב- plugin.xml קובץ, שנוצר עבורנו כאשר אנו מתחילים פרויקט חדש.

כברירת מחדל לקובץ יהיה ריק אלמנט, שם נוסיף את פעולותינו:

שימוש בקובץ XML לרישום פעולות יבטיח שהם יירשמו במהלך אתחול IDE, מה שבדרך כלל עדיף.

הדרך השנייה לרישום פעולות היא באמצעות תכנות ActionManager מעמד:

ActionManager.getInstance (). RegisterAction ("StackOverflow.SearchAction", SearchAction חדש ());

זה יתרון בכך שהוא מאפשר לנו לרשום פעולות באופן דינמי. לדוגמא, אם אנו כותבים תוסף לשילוב עם ממשק API מרוחק, ייתכן שנרצה לרשום מערך פעולות אחר בהתבסס על גרסת ה- API שאליה אנו קוראים.

החיסרון בגישה זו הוא שפעולות אינן נרשמות בעת ההפעלה. עלינו ליצור מופע של ApplicationComponent לניהול פעולות, שדורש יותר קידוד ותצורת XML.

5. בדיקת התוסף

כמו בכל תוכנית, כתיבת תוסף IntelliJ מחייבת בדיקה. עבור תוסף קטן כמו זה שכתבנו, זה מספיק כדי להבטיח שהתוסף אוסף ושהפעולות שיצרנו יעבדו כצפוי כשאנחנו לוחצים עליהם.

אנו יכולים לבדוק (ולפתור באגים) באופן ידני את התוסף שלנו באמצעות תצורת הפעלת תוסף:

פעולה זו תשיק מופע חדש של IntelliJ עם הפעלת התוסף שלנו. זה מאפשר לנו ללחוץ על פריטי התפריט השונים שיצרנו ולהבטיח את פתיחתם של עמודי Stack Overflow.

אם ברצונך לבצע בדיקות יחידה מסורתיות יותר, IntelliJ מספקת סביבה ללא ראש להפעלת בדיקות יחידות. אנו יכולים לכתוב מבחנים באמצעות כל מסגרת בדיקה שנרצה, והבדיקות מתבצעות באמצעות רכיבים אמיתיים ולא מעוקבים מה- IDE.

6. פריסת התוסף

התוסף DevKit מספק דרך פשוטה לארוז תוספים כדי שנוכל להתקין ולהפיץ אותם. פשוט לחץ באמצעות לחצן העכבר הימני על פרויקט התוסף ובחר "הכן מודול תוסף לפריסה". פעולה זו תיצור קובץ JAR בתוך ספריית הפרויקט.

קובץ ה- JAR שנוצר מכיל את קוד וקבצי התצורה הדרושים לטעינה ב- IntelliJ. אתה יכול להתקין אותו באופן מקומי, או לפרסם אותו במאגר תוספים לשימוש אחרים.

צילום המסך שלמטה מציג את אחד מפריטי התפריט החדש של Stack Overflow בפעולה:

7. מסקנה

במאמר זה פיתחנו תוסף פשוט המדגיש רק כמה מהאופן בו אנו יכולים לשפר את ה- IntelliJ IDE.

אמנם עבדנו בעיקר עם פעולות, אך ה- SDK של תוסף IntelliJ מציע מספר דרכים להוסיף פונקציונליות חדשה ל- IDE. לקריאה נוספת, עיין במדריך הרשמי לתחילת העבודה.

כמו תמיד, את הקוד המלא עבור תוסף הדוגמה שלנו ניתן למצוא במאגר GitHub שלנו.


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