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

6 篇文章 0 订阅
5 篇文章 0 订阅

项目配置及原理详细记录

项目结构

 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="support@yourcompany.com" 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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值