2016-06-14 95 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 
相關問題