【问题标题】:IntelliJ/structural search: Remove useless methods that only call super methodIntelliJ/结构搜索:删除只调用超级方法的无用方法
【发布时间】:2015-10-21 02:34:44
【问题描述】:

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

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

  1. $Annotation$ 更改为发生=1,文本=覆盖
  2. 添加了一个 $Statement$ 变量,其中发生了=1

模板代码:

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

到目前为止,一切都很好 - 它只在正文中找到具有单行的方法。但现在我想明确搜索调用超级方法的确切语句(有点像对 $MethodName$ 的反向引用),但它也返回超级值(当不是 void 时)。有什么想法吗?

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

【问题讨论】:

    标签: java android android-studio intellij-idea structural-search


    【解决方案1】:

    所以我最近发现 IntelliJ 的“空方法”检查实际上是在寻找这个。简单地说:

    Double Shift -> 按名称运行检查 -> 空方法

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

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

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

    【讨论】:

      【解决方案2】:

      使用结构搜索,您必须使用两个单独的搜索。一种用于查找返回类型为 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 中可以正常工作。
      猜你喜欢
      • 1970-01-01
      • 2016-11-29
      • 2011-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多