在我的一个Android项目中(但不一定与Android相关)我有很多方法调用,除了炸掉代码之外什么都不做,可以自动删除。例子:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}
@Override
public void onDestroy() {
super.onDestroy();
}
我无法找到任何帮助我自动删除这些表达式的检查,所以我尝试了结构搜索。到目前为止我的尝试:我复制了带注释方法的模板'并进行了两次小改动。
模板代码:
class $Class$ {
@$Annotation$( )
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
$Statement$;
}
}
到目前为止,这么好 - 它只能在体内找到一条线。但是现在我想明确地搜索调用super方法的精确语句(有点像$ MethodName $的后引用),但它也返回超值(非空时)。有什么想法吗?
我相信这将是一个非常有用的检查,可以集成到主IntelliJ代码库中。 : - )
答案 0 :(得分:8)
所以我最近发现了IntelliJ'空方法'检查实际上是寻找这个。简单地:
双班 - >按名称运行检查 - >空方法
概要是'方法只调用它的超级'但是检查实际上不只是寻找,例如:
根据您的情况,它可能找到比您想要的更多 - 并且重构试图删除超过我实际想要的。但通过快速的人工审查,你应该很高兴。 : - )
答案 1 :(得分:1)
使用结构搜索,您必须使用两个单独的搜索。一个用于查找具有void返回类型的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
super.$MethodName$($ParameterName$);
}
}
和第二个返回值的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
return super.$MethodName$($ParameterName$);
}
}
在这种情况下,不需要指定@Override
注释。