2014-09-05 22 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

相关问题