使用IDEA(社區版)開發IDEA Action插件


一、環境准備:

1. IDEA確保已安裝好插件Plugin DevKit

 2. 新建Plugin插件工程,選擇SDK為安裝IDEA包下的SDK,如果找不到就定位到IDEA安裝包下找

 3. 起好工程名,直接finish,如下我創建了plugindemo插件工程

 二、開發第一個彈窗Action示例

1. 在src下右鍵創建一個TestMenu Action,填寫配置信息,其中class name就是插件Action類名,Name就是插件功能菜單顯示名稱,Groups中要選擇插件功能屬於哪,如右鍵中就是EditorPopupMenu,還可以在Keyboard Shortcuts中設置快捷鍵,注意不要和其他快捷鍵沖突

 創建完后得到plugin.xml中的action如下

    <actions>
        <action id="plugin-testmenu" class="TestMenu" text="Test_Menu" description="測試">
            <add-to-group group-id="EditorPopupMenu" anchor="first"/>
        </action>
    </actions>

2. 在TestMenu類的actionPerformed方法中添加代碼JOptionPane.showMessageDialog(null, "Hello World");

3. debug模式啟動plugin,此后IDEA會啟動一個沙箱進程,開啟的沙箱IDEA中,右鍵就可以看到自己的插件了(注意,有可能沙箱進程慢,插件菜單要等一段時間才可點擊)。如果沙箱進程沒有打開過項目,可以自己通過File打開一個,可以選擇在當前窗口打開,需要手動在沙箱中安裝插件,當然要先進行插件生成

 4. 點擊插件按鈕TestMenu,如果有斷點可以看到進入斷點,直接運行看到彈窗

5.  修改下plugin.xml中的idea-plugin節點下name,該name用於插件名稱顯示

 6. build下編譯成jar包就可以安裝了,如果依賴了其他jar包,會編譯成zip包,同樣可以安裝。

 

 

 重啟后效果

三、創建一個Action組,並將多個action放到組里

1. 再創建一個Action類,這次不用選擇組

2. 修改plugin.xml中actions節點如下,group中的text就是插件組菜單的名稱

    <actions>
        <group id="hjpActionGroup" text="hjpActions" popup="true">
            <add-to-group group-id="EditorPopupMenu" anchor="first"/>
        </group>
        <action id="plugin-testmenu" class="TestMenu" text="Test_Menu" description="測試">
            <add-to-group group-id="hjpActionGroup"/>
        </action>
        <action id="plugin-testmenu2" class="TestMenu2" text="Test_Menu2" description="測試">
            <add-to-group group-id="hjpActionGroup"/>
        </action>
    </actions>

3. 沙箱運行,效果如下

 四、通過PsiFile操作Java代碼文件

注意plugin.xml需要加入依賴

<depends>com.intellij.modules.java</depends>

1. 獲取PsiJava

PsiFile psiFile = e.getData(LangDataKeys.PSI_FILE);
        if (psiFile instanceof PsiJavaFile) {
            PsiJavaFile psiJavaFile = (PsiJavaFile) psiFile;

2. 獲取PsiClass

PsiClass[] classes = psiJavaFile.getClasses();
        PsiClass psiClass = (PsiClass) classes[0];

3. 獲取當前PsiClass的父類

PsiClass superClass = psiClass.getSuperClass();

4. 獲取PsiField

PsiField[] fields = psiClass.getFields();

5. 獲取字段類型的類名

String fieldType = field.getType().getPresentableText();

6. 獲取字段注解內容

PsiAnnotation[] annotations = field.getAnnotations();
for (PsiAnnotation annotation : annotations) {
                final PsiJavaCodeReferenceElement nameReferenceElement = annotation.getNameReferenceElement();
                if (nameReferenceElement != null) {
                    final String referenceName = nameReferenceElement.getReferenceName();
                    //注解完整內容,自行處理
                }
            }

7. 獲取字段注釋內容,docComment.getText()獲取到完整內容,可自行處理

PsiDocComment docComment = field.getDocComment();

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM