"声明方法"的语义是什么?

时间:2016-06-14 11:07:29

标签: jqassistant

根据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.所以,如果一个类或一个类型"声明"这意味着什么?一个方法?似乎一些继承的方法也依赖于:类型或:类。我怎样才能获得真实的"没有继承方法的类本身声明的方法数量?

3 个答案:

答案 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