開發IDEA定位到.class檔案的外掛(二)專案配置及原理詳細記錄
阿新 • • 發佈:2019-01-03
專案配置及原理詳細記錄
專案結構
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檔案,不配會多一個查詢全限定名的步驟。我這裡是官方示例,如果自己開發在說吧,這個只是個人建議,喜好問題,不做進一步討論了。
專案地址: