Jus*_*s12 6 java static-analysis findbugs pmd
假设我的库中有两种方法:
void com.somepackage.SomeClass.someSink(String s)
和
int com.someotherpackage.SomeOtherClass.someSource(int i)
第一种方法用作数据接收器,第二种方法用作我的代码中的数据源.类型参数int, String仅作为示例给出,并且可能在实际情况中改变.
我想在一些代码中检测这些方法的用法,这些代码满足下面给出的某种模式:
x)是由源生成的y)是使用一系列转换生成的f1(f2(... fn(x))y 给了水槽.只要存在从生成接收器数据的函数的调用序列到从源接收数据的函数,转换就可以是任意函数.这些函数也可以采用任何其他参数,并用作黑盒子.
扫描可以是源或字节码级别.有哪些工具可用于此类分析?
首选基于非IDE的工具和Java API.
[编辑:]澄清更多,someSink并someSource分别是类SomeSome和语言中的任意方法名称SomeOtherClass.它们可能是也可能不是static,可以采用任意数量的参数(我应该能够定义).参数的类型也不是任意的.唯一的要求是该工具应扫描代码并输出模式出现的行号.所以这个工具可能会这样工作:
示例输出:
MyClass1.java:12: value1 = com.someotherpackage.SomeOtherClass.someSource(...)
MyClass2.java:23: value2 = foo(value1, ...)
MyClass3.java:3: value3 = bar(value2)
MyClass4.java:22: com.somepackage.SomeClass.someSink(value3, ...)
Run Code Online (Sandbox Code Playgroud)
注意:如果函数不接受参数但对数据有一些副作用,则还需要考虑.(示例a = source(); void foo(){ c = a+b }; foo(); sink(c)是需要捕获的模式.)