【发布时间】:2020-04-09 15:45:49
【问题描述】:
我正在尝试获取我的代码方法的控制流图。它适用于所有方法,直到我要求它分析具有如下 lambda 表达式的方法。
public void test()
{
List<String> test = new ArrayList<String>();
test.forEach((action)->{
System.out.println(action);
});
}
我尝试调用 Body body = method.retrieveActiveBody(); 时遇到的异常是
java.lang.RuntimeException: Failed to convert <combin.Line: void test()>
at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2040)
at soot.SootMethod.retrieveActiveBody(SootMethod.java:402)
Caused by: java.lang.RuntimeException: No method java.lang.Boolean valueOf(boolean) in class java.lang.Boolean
at soot.SootClass.getMethod(SootClass.java:412)
at soot.LambdaMetaFactory$Wrapper.<init>(LambdaMetaFactory.java:285)
at soot.LambdaMetaFactory.<init>(LambdaMetaFactory.java:63)
at soot.Singletons.soot_LambdaMetaFactory(Singletons.java:2408)
at soot.LambdaMetaFactory.v(LambdaMetaFactory.java:67)
at soot.asm.AsmMethodSource.convertInvokeDynamicInsn(AsmMethodSource.java:1420)
at soot.asm.AsmMethodSource.convert(AsmMethodSource.java:1791)
at soot.asm.AsmMethodSource.getBody(AsmMethodSource.java:2038)
... 8 more
我使用的烟灰版本是
compile group:'ca.mcgill.sable', name: 'soot' , version:'3.3.0'
【问题讨论】:
标签: lambda static-analysis soot control-flow-graph