0

我正在尝试使用 jqassistant 来查找我的项目中使用的任何已检查异常。有没有办法用 jqa 区分已检查/未检查的异常?

4

1 回答 1

1

如果您知道哪些类型是受检异常,即从 java.lang.Exception 继承,则可以检测受检异常的使用。

这里的问题是您可能看不到完整的继承层次结构,因为这需要扫描所有涉及的工件。作为示例,您将看到应用程序的任何异常都继承自 java.io.IOException,但由于尚未扫描 JRE-JAR 文件,因此在图中看不到此异常实际上扩展了 java.lang.Exception。此限制也适用于可能提供自己的异常类型的所有其他使用的库。

解决此问题的一种方法是使用标签显式标记所需的异常类型:Exception:Checked,例如

MATCH
  (:Artifact)-[:REQUIRES]->(e:Type)
WHERE
  e.fqn in [
    "java.lang.Exception",
    "java.io.IOException"
  ]
SET
  e:Exception:Checked
RETURN
  e

使用这个概念,可以创建一个关于创建检查异常实例的方法的报告:

MATCH
  (t:Type)-[:DECLARES]->(m:Method)-[i:INVOKES]->(:Constructor)<-[:DECLARES]-(e:Exception:Checked)
RETURN
  t.fqn, m.signature, i.lineNumber
于 2018-10-10T10:35:10.777 回答