Dav*_*ams 6 java static-analysis
我试图找出如何获取Java pojo,并分析其方法可以调用所有其他方法和函数.例如,这是输出的硬编码示例.我该怎么做这个一般?我需要以编程方式分析Java对象,以确定执行时可以调用的方法.例:
package com.example.analyze;
public class Main
{
private static class Foo {
public void foo(int value, Bar bar) {
if(value > 5)
bar.gaz();
}
}
private static class Bar {
public void gaz() {
System.out.println("gaz");
}
}
private static class Analyzer {
public void analyze(Object object){
System.out.println("Object method foo could call Bar method gaz");
}
}
public static void main(String[] args)
{
Foo foo = new Foo();
Analyzer analyzer = new Analyzer();
analyzer.analyze(foo);
}
}
Run Code Online (Sandbox Code Playgroud)
你需要的是构造一个调用图,然后询问调用图中是否连接了两个节点(一个调用者和被调用者).这不是一件容易的事.
你需要做什么:
[您可能能够避免使用Wala的上述解析/名称类型解析部分,Wala基本上是通过执行上述大部分工作构建的].
使用调用图,如果您想知道A是否可以调用B,请在调用图中找到A的节点,并查看是否有到B的路径.
这里的另一个注意事项表明这是编译器类的6个月任务.我认为对于经验丰富的编译人员来说,这是6个月,或者更多(并且我们没有解决诸如类加载器和反射调用之类的令人讨厌的问题).
我认为你最好找到一个解决方案,其他人已经建立了.有人可能; 不太可能很容易找到它或她想要分开它.您可能会发现在Univerisities中完成的实现; 学术界编写的各种论文(并由原型支持)来计算对象图.缺点是所有这些系统都是原型,并由小型,无偿的毕业生团队构建,他们通常不处理所有边缘情况,更不用说最新版本的Java(lambdas,任何人?)