IDEA Select Refactoring
描述:
项目使用了Cucumber,对着 feature 文件内部右键运行的时候,有时候会出现右键菜单不可用且无法消除的情况,必须切换窗口来消除这个菜单。
这个不知道是 IDEA 还是它自带的 Gherkin 插件的一个bug,不是一个大问题,但是总是会误操作点出来。
bug复现:
当在 feature(gherkin 语法)文件中,如果对着非 Example 的一个数据右键:
![](http://md.demojie.com/img/20200209020436.png)
就会弹出以下提示,说找到两个Handler,要你选择一个,随便选择,OK 还是 Cancel 也随便:
![](http://md.demojie.com/img/20200209020730.png)
然后又会弹出一次,也随便选:
图:略
然后就会弹出这个右键菜单:
这个菜单是消除不了的,除非你切换程序再切回来,它才会消失。
而且这个菜单你可以点击,但没有高亮提示你当前鼠标是处于哪个选项。
![](http://md.demojie.com/img/20200209020912.png)
解决:
先说怎么解决,这个解决方法治标不治本,除非你去修改 IDEA 的源码。
想给 IDEA 提 Issue,不过好像并不是直接能在 Github 上面提,有点麻烦就暂时算了。
通过对 IDEA 源码远程 Debug 发现这两个 Handler 的作用:
-
GherkinStepRenameHandler 是用来重命名 Step 的
-
GherkinInplaceRenameHandler 是用来重命名 Example 中的变量的
一般重命名都是使用 Shift + F6 操作的,但也支持右键菜单操作。
解决方法就是,把其中一个去掉,就不会弹出确认框,也就不会导致后续菜单卡画面。
只要在 gherkin.jar 中的 plugin.xml 中去掉其中一个即可。
1 找到插件位置
Community 版本:~\.IdeaIC2019.2\plugins\gherkin\lib
or
Ultimate 版本:[IDEA 安装路径]\plugins\gherkin\lib
注意:两个版本的插件位置是不一样的。
2 提取 jar 中的 META-INF/plugin.xml
jar xf gherkin.jar META-INF/plugin.xml
3 修改 META-INF/plugin.xml
删掉其中的一个 Handler:
我平时用不到 Example 的变量重命名,所以就选择删掉 GherkinInplaceRenameHandler。
4 将 META-INF/plugin.xml 更新回 jar中
jar uf gherkin.jar META-INF/plugin.xml
注意:这一步需要关闭 IDEA,不然 jar 会被程序占用而导致更新失败。
最好将 gherkin.jar 备份一下。
最后记得删掉提取出来的文件。
5 查看是否解决
对者一个数据右键,可以看到,直接就弹出右键菜单了,并且可以选择和取消:
![](http://md.demojie.com/img/20200209025220.png)