开发IDEA定位到.class文件的插件(二)项目配置及原理详细记录

版权声明:如果觉得文章对你有用,转载不需要联系作者,但请注明出处 https://blog.csdn.net/jinxin70/article/details/85242577

项目配置及原理详细记录

项目结构

 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

猜你喜欢

转载自blog.csdn.net/jinxin70/article/details/85242577
今日推荐