为什么声纳需要二进制文件(sonar.binaries)?它如何使用二进制文件来完成对二进制文件的操作?
答案 0 :(得分:15)
sonar.binaries
是不推荐使用的属性:您现在应该使用sonar.java.binaries
这个属性由java分析使用(所以我假设你正在分析java代码)。
分析是在源级别逐个文件完成的,为了正确地进行语义分析,java分析器从.class
文件中读取外部依赖关系的信息。
具体来说,这就是它的工作原理:分析声明的A.java
:
class A {
B b;
}
java分析器将构建类A的语义模型,外部依赖项查找B.class
的字节码以完成其语义分析。
为什么这样做?为了解决表达式的类型,可以进行更准确的分析。 (即:回答问题:b.foo()的类型是什么:我们需要找出foo()方法的定义)。
这是对依赖于每个外部依赖项的字节码的实现的有意选择,即使我们有它们的源。