2016-06-14 104 views
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。我怎样才能得到由类本身声明的,没有继承方法的“真实”数量的方法?

+0

检查这一个http://stackoverflow.com/questions/1857775/getting-a-list-of-accessible-methods-for -a-given-class-via-reflection – Aravind

回答

1

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

MATCH 
    (:Artifact)-[:CONTAINS]->(t:Type)-[:DECLARES]->(m:Method) 
WHERE 
    t.fqn=~'.*MyException' 
RETURN 
    t.fqn as Type, COUNT(m) as MethodCount 
+0

此外,在此查询中,我还获得了两个附加方法:来自Throwable的getCause()和initCause(Throwable)。这两种方法都是从MyException中调用*,而不是在其中声明*。这些方法只有一个签名属性,所以我可以正确地过滤,但是对于metric.xml文档中的提示可能会很好。 –

+0

你能提供一个调用这些方法的异常的例子吗?我想看看生成的字节码。 –

0

第一个查询查找具有相同fqn的多个类型节点并汇总结果。只需将id(t)添加到return子句中,您应该可以看到它。

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 
相关问题