IntelliJ /结构搜索:删除只能调用super方法的无用方法

在我的一个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(); } 

我找不到任何帮助我自动删除这些expression式的检查,所以我尝试了结构搜索。 到目前为止我的尝试:我复制了“注释方法”的模板并进行了2次小改动。

  1. $ Annotation $更改为= 1,text =覆盖
  2. 使用occurrence = 1添加$ Statement $variables

模板代码:

 class $Class$ { @$Annotation$( ) $MethodType$ $MethodName$($ParameterType$ $ParameterName$) { $Statement$; } } 

到目前为止,这么好 – 它只是在体内find一条线的方法。 但是现在我想明确地搜索调用super方法的精确语句(有点像$ MethodName $的后引用),但它也返回超值(当不是void时)。 有任何想法吗?

我相信这将是一个非常有用的检查,可以集成到主IntelliJ代码库中。 🙂

所以我最近发现IntelliJ的’空方法’检查实际上是在寻找这个。 只是:

双class – >按名称运行检查 – >空方法

方法只调用它的超级

概要是’方法只调用它的超级’,但检查实际上寻找的不仅仅是这个,例如:

  • 该方法及其所有派生词都是空的
  • 此方法的所有实现都是空的
  • 该方法为空
  • 空方法重写空方法

根据您的情况,它可能find比您想要的更多 – 并且重构试图删除超过我实际想要的。 但通过快速的人工审查,你应该很高兴。 🙂

使用结构搜索,您将不得不使用两个单独的搜索。 一个用于查找具有void返回types的方法:

 class $Class$ { $MethodType$ $MethodName$($ParameterType$ $ParameterName$) { super.$MethodName$($ParameterName$); } } 

和第二个返回值的方法:

 class $Class$ { $MethodType$ $MethodName$($ParameterType$ $ParameterName$) { return super.$MethodName$($ParameterName$); } } 

在这种情况下,不需要指定@Override注释。