在 Eclipse 中,如何找到 Java 抛出特定异常的代码?

In Eclipse, how can I find Java code that throws a certain Exception?

在尝试理解 Java 代码时,有时我想找到所有代码中抛出特定自定义异常(即 java.lang.Exception 的子 class)的所有代码。

为此,我可以在 Eclipse 中对异常 class 使用 "Find References"。但是,这会找到 throwcatch 异常的地方。

有没有办法专门找到抛出某个异常的代码?


相关问题:Eclipse: find lines in a block that can throw exceptions

但是,这个问题是关于在单个代码块中查找所有位置,而我的问题是关于在一个项目的多个 class 中查找所有位置。

在 IntelliJ 中,您可以执行所谓的 "Structural Search"。使用此结构搜索 "new A()" 确实找到了下面使用的所有 3 个实例:

private static class A { }

public static void main(String[] args) {
    new A();

    new

            A();

    new    A(


    );
}

https://www.quora.com/How-can-IntelliJ-style-Structural-Search-and-Replace-be-done-on-Eclipse 暗示在 Eclipse 中通过使用正则表达式进行 "simple" 搜索并尽可能在正则表达式内部使用 \W 到 "ignore" 换行符,空格、制表符等。new(\W+)A(\W*)\( 实际上效果很好。

我知道这不是一个完整的答案,但也许您可以了解更多关于 IntelliJ 用于此目的的术语

这可以通过使用 "Java Search" 并将匹配限制为实例创建来实现。


说明:

  • 打开 "Java Search"(菜单 "Search"/"Java...",或工具栏图标)
  • 作为搜索词,输入您要查找的异常的完全限定名称
  • "Search for": "Type"
  • "Limit To": "Match locations", 然后在链接的详细信息中 selection, select 只有 "Class instance creations"

两个限制:

  • 这还将找到创建异常但不抛出异常的代码(不常见,但可能)。
  • 这将不会找到捕获然后重新抛出异常的代码——这可能是也可能不是您想要的。

灵感来自 similar Eclipse bug 296947.

假设我们不是在谈论像 NPE 或 ClassCastException 这样的间接抛出,并且假设我们在创建异常的地方抛出异常,您可以调用异常构造函数的调用层次结构。

Eclipse 的 "Call Hierarchy" 不仅可以用在方法上,还可以用在 classes 上——然后它将显示所有构造函数调用。使用异常上的调用层次结构 class 甚至在第 3 级库中查找构造函数调用。