根据metric.xml中定义的查询,我试着弄清楚一个类声明了多少个方法:
MATCH
(t:Type:File)-[:DECLARES]->(m:Method)
WHERE
t.fqn=~'.*MyException'
RETURN
t.fqn as Type, COUNT(m) as MethodCount
这是41。
我将查询更改为
MATCH
(t:Class:File)-[:DECLARES]->(m:Method)
WHERE
t.fqn=~'.*MyException'
RETURN
t.fqn as Type, COUNT(m) as MethodCount
我在同一个班级得到25分。不应该是相同的结果吗? 如果我打开课程并手工计数,我只找到23.所以,如果一个类或一个类型"声明"这意味着什么?一个方法?似乎一些继承的方法也依赖于:类型或:类。我怎样才能获得真实的"没有继承方法的类本身声明的方法数量?
答案 0 :(得分:1)
根本原因是相同的异常类型很可能作为多个节点可用,因为它包含在一个工件中并且需要其他工件。找到"真实"节点使用以下查询:
MATCH
(:Artifact)-[:CONTAINS]->(t:Type)-[:DECLARES]->(m:Method)
WHERE
t.fqn=~'.*MyException'
RETURN
t.fqn as Type, COUNT(m) as MethodCount
答案 1 :(得分:0)
第一个查询找到具有相同fqn的多个类型节点并聚合结果。只需将id(t)添加到return子句中,您就应该看到它。
答案 2 :(得分:0)
原帖中有几个相关的问题。答案如何只找到真正在类中声明的方法是:
MATCH
(:Artifact)-[:CONTAINS]->(t:Type)-[:DECLARES]->(m:Method)
WHERE
t.fqn=~'.*MyException' AND m.name <> ''
RETURN
t.fqn as Type, COUNT(m) as MethodCount