0

根据 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 个。那么,如果一个类或一个类型“声明”一个方法,这意味着什么?根据 :Type 或 :Class 似乎也计算了一些继承的方法。以及如何在没有继承方法的情况下获得类本身声明的“真实”数量的方法?

4

3 回答 3

1

根本原因是相同的异常类型很可能可用作多个节点,因为它包含在一个工件中并为其他工件所需要。要查找“真实”节点,请使用以下查询:

MATCH
  (:Artifact)-[:CONTAINS]->(t:Type)-[:DECLARES]->(m:Method)
WHERE
  t.fqn=~'.*MyException'
RETURN
  t.fqn as Type, COUNT(m) as MethodCount
于 2016-06-14T12:38:25.637 回答
0

第一个查询找到具有相同 fqn 的多个类型节点并聚合结果。只需将 id(t) 添加到 return 子句,您就会看到它。

于 2016-06-14T11:29:15.060 回答
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
于 2016-06-15T07:35:07.323 回答