主体的最开始的下挂节点的部分自己没有研究,自己只是在这个的基础上下挂了一些其他的东西,但是拜读了整个的代码,觉得非常的有意思,写了一个回顾和总结。
自己在已经有的树上下挂一个场景节点,就像在project下下挂一些业务节点,可以将代码和业务的关联更紧密,领导看的更方便。
下面直接进入正文,观看者最好结合idea源码观看。
目标,首先下挂一级子节点,其次是在挂到其他业务上和该节点有关系的地方。
1.直接下挂节点,当不复杂的时候,直接起一个节点,选择放下去即可。idea提供的扩展点很丰富,直接源码里面搜索。
2.该类型节点放到其他节点下是,getchildren方法是挂子节点的地方,注意:由于还需要有equals和其他的比较类型等情况,最好不要将不同类型的节点挂在一个子节点下,否则需要去重写比较多的equals等,这是涉及到idea的节点检查机制,有些断言过不去。当然扩展同一个的类型节点,修改它的参数,将逻辑一概,这是一个好的挂在新类型节点的方式。
3.节点的扩展,没有印象了。比较简单
4.类加载的概念,一个配置类可以每次重新去读取,执行后即可放到java类加载器中,DynamicLoader.compile()把文件加类名变成字符流i,之后classloader加载自己字符流,最好classloader.load 全类名就已经加载进去了。之后利用java的反射或者实例化还操作了。
5.4虽然4很牛逼,但是最好是在本项目内使用,插件不好用,因为回去找类库,所以多了import后找不到,所以改成了字符串匹配
6.idea的一个全局的动作拦截器,写法如下。
首先实在plugin.xml注册一个backgroundPostStartUpActivity 这是是需要背景加载的东西。
命名这个backgroundPostStartUpActivity implates StartupActivity,重写runActivity方法,这里面的东西都会跑起来,为了后台跑加了一个idea的线程,ApplicationManager,getApplication().runReadAction ->({这里面会有一系列出事的动作})
一系列的初始化动作像ActionManager添加监听器,监听方法为afterActionPerformed()在里面写逻辑呼叫额,传入的为全局量action dataContext,anActionEvent。可获取action的全部信息,将以上内容用方法包裹起来,调用即可。
7.关于一个全新的panel
在project在扩展一个权限的panel,在plugin.xml中差异如一个projectViewPane,即是全局放入节点,Extends abstractProjectViewPane 重写对应的方法,这是此视图的最基本的规则。
接下来可以先建一个抽象类节点,定义些这个pannel下的出事信息,写下这个pannel的所有信息,
其次就是弄一个树显示在这个下面的,就是利用addchildren发的方法,一级级的下套,第一层节点是没有实际信息的,直接将剩下的有实际信息的节点下挂到。实际信息的addchildren就需要根据业务扩展逻辑。