如何分析脱离上下文的Java方法?
我试着做以下工作:对于一个给定的Java方法,我想看看这个方法是否可以在特定的上下文中使用并且是正确的,也就是说,是否存在某些类、字段、方法等的定义,这些定义的存在使得这个方法是正确的。例如,方法如何分析脱离上下文的Java方法?,java,static-analysis,Java,Static Analysis,我试着做以下工作:对于一个给定的Java方法,我想看看这个方法是否可以在特定的上下文中使用并且是正确的,也就是说,是否存在某些类、字段、方法等的定义,这些定义的存在使得这个方法是正确的。例如,方法 int m() { A a = new A(); return a.value() + 1; } 例如,定义了类A,该类有一个名为value的公共方法,并且该方法返回int时是正确的。另一方面 int m() { A a1 = new A(); int n = a1.
int m() {
A a = new A();
return a.value() + 1;
}
例如,定义了类A
,该类有一个名为value
的公共方法,并且该方法返回int
时是正确的。另一方面
int m() {
A a1 = new A();
int n = a1.value();
A a2 = new A();
String s = a2.value();
return s.length() + n;
}
没有上下文可以使方法正确。我知道这个问题可能有点过于宽泛(而且有点理论化),但总的来说,我该如何处理这类问题呢?首先,我知道应该有某种类型的检查和控制流分析。不过,我不确定这是否是必须完成的全部工作。还需要使用类加载器,以及被测试应用程序必须查看引用类是否可用的类路径。我认为,从那个里反射来检查方法签名。类型系统会有所帮助。第二段代码是错误的,因为.value()不能同时为int和String。这正是系统可以检查的类型可能是这种错误导致方法无法编译。。如果不编译java,您想如何查看它是否正确?@X-Pippes可能会使用一种算法,该算法使用与编译器类似的逻辑,但不同的是,当它遇到未定义的类型时,它会假设该类型在某个地方定义,并且只有当它发现矛盾时,它才会报告无法完成。但是,我不知道如何实现这一点(如果这个想法是正确的ofc)您能详细说明为什么运行编译器无法解决您的问题吗?谢谢