使用jQAssistant查找已检查/未检查的异常

时间:2018-10-10 07:26:13

标签: java cypher jqassistant

我正在尝试使用jqassistant查找项目中使用的所有已检查异常。 是否可以通过jqa区分已检查/未检查的异常?

1 个答案:

答案 0 :(得分: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