2014-09-05 97 views
0

我需要解析java方法,查看其內部的所有其他方法調用(以及它們內部和更深處的方法等),以便查找某些字符串的所有出現,請讓說「System.out.println(」Blabla「);」從JDT的方法開始深入調用所有方法調用

我該如何使用JDT(http://www.programcreek.com/2011/01/best-java-development-tooling-jdt-and-astparser-tutorials)以及其他選擇?

如果我有這樣的代碼:

public void A() { 

    "System.out.println ("Blabla"); 
    B();   

} 

public void B() { 

    "System.out.println ("Blabla"); 
    C(); 

} 

public void C() { 

    "System.out.println ("Blabla"); 

} 

我想只是指定方法的名稱(「A」),並作爲輸出我想:

"System.out.println ("Blabla"); 
"System.out.println ("Blabla"); 
"System.out.println ("Blabla"); 
+0

您可以再次閱讀您的代碼嗎?它不會像那樣編譯。 – 2014-09-05 14:05:44

回答

1

這對於JDT/AST是可行的。我做了類似的事情。我最喜歡的方法是在項目內部爲Eclipse創建插件並處理文件(編譯單元)。

的基本步驟跟隨有:

  1. 可以使用AST來解析代碼(即一個JDT ICompilationUnit的)轉換成一個 AST模型。

  2. 然後,您可以使用訪問者模式來查找要開始搜索的MethodDeclaration。

  3. 一旦你有了,你可以在MethodDeclaration上再次使用訪問者來查找方法體內的所有MethodInvocations。

  4. MethodInvocation的綁定會指向MethodDeclaration方法被調用的方法。 (請務必在解析時啓用綁定。)

當使用AST時,一個非常好的工具是AST視圖。它向您展示了使用Eclipse Java編輯器打開的文件的AST模型。您可以從此更新站點安裝AST視圖:http://www.eclipse.org/jdt/ui/update-site

+0

真的非常感謝,更有幫助! – 2014-09-09 16:33:20

+0

你有這樣一個插件的工作實現,我可以分叉嗎? – 2014-09-10 08:36:39

+0

它不是開源的。 – 2014-09-11 09:21:19

1

你想要通過手動或編程方式來做到這一點?

我會建議使用Eclipse中的打開調用層次結構選項,只需按按Ctrl + Alt + H檢查,如果這就是你所需要的。它追溯到給定方法被調用的地方。如果您熟悉JDT,您必須具備一些關於如何查找該Eclipse功能的實現的經驗,以便您可以進一步分析它(我建議使用Plug-in Spy)。

希望能幫助一些東西。

+0

我需要做這個programmaticaly,和(我不知道如何解釋..)我不需要回溯,但我想從一個方法開始,並進行內部調用的所有方法內搜索方法。 – 2014-09-06 11:35:09

+0

所以基本上你想用他們的代碼替換所有的方法調用?你想要做的深度是什麼,例如'System.out'的'println()'也是一種方法,你是否也想提取它?所以我懷疑是否有已經存在的功能,你應該給出一個白名單的功能,等等。 – rlegendi 2014-09-07 18:25:53