1. 程式人生 > >開發IDEA定位到.class檔案的外掛(二)專案配置及原理詳細記錄

開發IDEA定位到.class檔案的外掛(二)專案配置及原理詳細記錄

專案配置及原理詳細記錄

專案結構

 HelloAction.java

import com.intellij.openapi.actionSystem.AnAction;
import com.intellij.openapi.actionSystem.AnActionEvent;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.Messages;

public class HelloAction extends AnAction {
    public HelloAction() {
        super("Hello");
    }

    @Override
    public void actionPerformed(AnActionEvent anActionEvent) {
        Project project = anActionEvent.getProject();
        Messages.showMessageDialog(project, "Hello world!", "Greeting", Messages.getInformationIcon());
    }
}

Action在IDEA中,(⊙o⊙)…就是Action吧,你可以翻譯過來叫做動作,是IDEA對動作的抽象。

AnAction是一個比較重要的抽象類,一般複寫其actionPerformed方法,即可實現一些操作。它還有一個update方法可以複寫,這裡不討論,可參見AnAction的類註釋,有例子。

看一下程式碼:

1、通過事件獲取到當前的project

2、通過呼叫Messages.showMessageDialog彈出一個對話方塊,顯示的內容是Hello world!

showMessageDialog的方法簽名:

小結:HelloAction被觸發後,會彈出一個對話方塊,顯示Hello world!

 

plugin.xml

<idea-plugin>
    <id>com.rong.kim.open_class_file</id>
    <name>Plugin display name here</name>
    <vendor email="[email protected]" url="http://www.yourcompany.com">YourCompany</vendor>

    <description><![CDATA[
    Enter short description for your plugin here.<br>
    <em>most HTML tags may be used</em>
    ]]></description>

    <!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/plugin_compatibility.html
         on how to target different products -->
    <!-- uncomment to enable plugin in all products
    <depends>com.intellij.modules.lang</depends>
    -->
<!--    <depends>com.intellij.modules.lang</depends>-->

    <extensions defaultExtensionNs="com.intellij">
        <!-- Add your extensions here -->
    </extensions>

    <actions>
        <!-- Add your actions here -->
        <group id="MyPlugin.SampleMenu" text="Greeting" description="Greeting menu">
            <add-to-group group-id="MainMenu" anchor="last"/>
            <action id="Myplugin.Textboxes" class="HelloAction" text="Hello" description="Says hello"/>
        </group>

    </actions>
</idea-plugin>

另外一個檔案,plugin.xml,這個檔案通過配置來註冊我們寫的action

1、主要看actions標籤內的group標籤:

<group id="MyPlugin.SampleMenu" text="Greeting" description="Greeting menu">
	<add-to-group group-id="MainMenu" anchor="last"/>
	<action id="Myplugin.Textboxes" class="HelloAction" text="Hello" description="Says hello"/>
</group>

使用add-to-group標籤,將我們的group加到一個已有的group,這個已有的group-id為MainMenu,錨點為last。

錨點我的理解應該是擴充套件的位置,但是是顯示的位置,還是載入的時機?這個後面慢慢用起來應該就知道了,先留著。

小結:我們的group是註冊到主選單上的

 2、action標籤配置的是HelloAction,注意這裡class屬性的值沒有配置全限定名,最好是配一下,感覺更靠譜,因為不配全限定名,它內部解析的時候還是要去通過全限定名找HelloAction的二進位制.class檔案,不配會多一個查詢全限定名的步驟。我這裡是官方示例,如果自己開發在說吧,這個只是個人建議,喜好問題,不做進一步討論了。

 

專案地址:

https://gitee.com/jinxin.70/open-class-file