Java IntelliJ/structural search:删除只调用超级方法的无用方法
在我的一个Android项目中(但不一定与Android绑定),我有很多方法调用,它们实际上什么都不做,只是破坏了代码,可以自动删除。示例:Java IntelliJ/structural search:删除只调用超级方法的无用方法,java,android,android-studio,intellij-idea,structural-search,Java,Android,Android Studio,Intellij Idea,Structural Search,在我的一个Android项目中(但不一定与Android绑定),我有很多方法调用,它们实际上什么都不做,只是破坏了代码,可以自动删除。示例: @Override public boolean onKeyDown(int keyCode, KeyEvent event) { return super.onKeyDown(keyCode, event); } @Override public boolean onCreateOptionsMenu(Menu menu) { retu
@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();
}
我找不到任何有助于自动删除这些表达式的检查,所以我尝试了结构搜索。到目前为止,我的尝试是:复制了“带注释的方法”的模板,并做了2个小改动
class $Class$ {
@$Annotation$( )
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
$Statement$;
}
}
到目前为止,一切都很好——它只是找到了在主体中只有一行的方法。但是现在我想明确地搜索调用super方法的确切语句(有点像$MethodName$的反向引用),但它也返回super值(如果不是void)。有什么想法吗
我相信这将是一个非常有用的检查,也可以集成到主要IntelliJ代码库中。:-) 所以我最近发现IntelliJ的“空方法”检查实际上是在寻找这个。简单地说: 双班->按名称运行检验->空方法 大纲是“方法只调用其超级”,但检查实际上寻找的不仅仅是这个,例如:
- 该方法及其所有派生项均为空
- 此方法的所有实现都是空的
- 方法为空
- 空方法重写空方法
根据您的情况,它可能会找到比您想要的更多的内容,而重构尝试删除比我实际想要的更多的内容。但是,通过快速手动检查,您应该可以很好地进行操作。:-) 使用结构化搜索,您必须使用两个单独的搜索。一个用于查找具有void返回类型的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
super.$MethodName$($ParameterName$);
}
}
第二个用于返回值的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
return super.$MethodName$($ParameterName$);
}
}
在这种情况下,不需要指定
@Override
注释 不,这不起作用。这个模板发现了更多的方法——不仅仅是那些调用super的方法。虽然我不知道为什么。。。此外,它还忽略了必须传递给超级方法的参数。可能是个虫子。我将尝试解决这个问题。在IntelliJ IDEA 2016.3中,以这种方式搜索超级方法是正确的。