IntelliJ/structural 搜索:删除只调用超级方法的无用方法
IntelliJ/structural search: Remove useless methods that only call super method
在我的一个 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();
}
我找不到任何帮助我自动删除这些表达式的检查,所以我尝试了结构搜索。到目前为止我的尝试:我复制了 'annotated methods' 的模板并做了 2 处小改动。
- $Annotation$ 更改为 occurs=1, text=Override
- 添加了 occurs=1 的 $Statement$ 变量
模板代码:
class $Class$ {
@$Annotation$( )
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
$Statement$;
}
}
到目前为止,一切顺利 - 它只在正文中找到只有一行的方法。但是现在我想明确地搜索调用 super 方法的确切语句(有点像对 $MethodName$ 的反向引用),但它也是 return super 值(当不为空时)。有什么想法吗?
我相信这将是一个非常有用的检查,也可以集成到主要的 IntelliJ 代码库中。 :-)
所以我最近发现 IntelliJ 的 'Empty method' 检查实际上是在寻找这个。只需:
双班次 -> 运行 按名称检查 -> 空方法
大纲是'Method only calls its super',但是检查其实找的不止这个,例如:
- 该方法及其所有导数都是空的
- 这个方法的所有实现都是空的
- 方法为空
- 空方法覆盖空方法
根据你的情况,它可能会找到比你想要的更多的东西——重构试图删除比我实际想要的更多的东西。但是通过快速的人工审查,你应该可以开始了。 :-)
使用结构搜索,您将不得不使用两个单独的搜索。一种用于查找 void return 类型的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
super.$MethodName$($ParameterName$);
}
}
第二个用于 return 值的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
return super.$MethodName$($ParameterName$);
}
}
在这种情况下不需要指定 @Override
注释。
在我的一个 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();
}
我找不到任何帮助我自动删除这些表达式的检查,所以我尝试了结构搜索。到目前为止我的尝试:我复制了 'annotated methods' 的模板并做了 2 处小改动。
- $Annotation$ 更改为 occurs=1, text=Override
- 添加了 occurs=1 的 $Statement$ 变量
模板代码:
class $Class$ {
@$Annotation$( )
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
$Statement$;
}
}
到目前为止,一切顺利 - 它只在正文中找到只有一行的方法。但是现在我想明确地搜索调用 super 方法的确切语句(有点像对 $MethodName$ 的反向引用),但它也是 return super 值(当不为空时)。有什么想法吗?
我相信这将是一个非常有用的检查,也可以集成到主要的 IntelliJ 代码库中。 :-)
所以我最近发现 IntelliJ 的 'Empty method' 检查实际上是在寻找这个。只需:
双班次 -> 运行 按名称检查 -> 空方法
大纲是'Method only calls its super',但是检查其实找的不止这个,例如:
- 该方法及其所有导数都是空的
- 这个方法的所有实现都是空的
- 方法为空
- 空方法覆盖空方法
根据你的情况,它可能会找到比你想要的更多的东西——重构试图删除比我实际想要的更多的东西。但是通过快速的人工审查,你应该可以开始了。 :-)
使用结构搜索,您将不得不使用两个单独的搜索。一种用于查找 void return 类型的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
super.$MethodName$($ParameterName$);
}
}
第二个用于 return 值的方法:
class $Class$ {
$MethodType$ $MethodName$($ParameterType$ $ParameterName$) {
return super.$MethodName$($ParameterName$);
}
}
在这种情况下不需要指定 @Override
注释。