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

时间:2015-07-29 21:53:42

标签: 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) {
    return super.onCreateOptionsMenu(menu);
}

@Override
public void onDestroy() {
    super.onDestroy();
}

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

  1. $ Annotation $已更改为= 1,text =覆盖
  2. 使用occurrence = 1
  3. 添加了$ Statement $变量

    模板代码:

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

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

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

2 个答案:

答案 0 :(得分:8)

所以我最近发现了IntelliJ'空方法'检查实际上是寻找这个。简单地:

双班 - >按名称运行检查 - >空方法

method only calls its super

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

  • 该方法及其所有可派生物都是空的
  • 此方法的所有实现均为空
  • 方法为空
  • 空方法会覆盖空方法

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

答案 1 :(得分:1)

使用结构搜索,您必须使用两个单独的搜索。一个用于查找具有void返回类型的方法:

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

和第二个返回值的方法:

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

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