jacoco收集覆盖率信息最小单元是在MethodAnalyzer
中进行分析,其对每一个指令进行判断,在visitend
后对每一个指令进行一系列的操作(在一个for循环中),下面通过log判断其对一直指令的执行过程。以iload_1
为例:
//该指令执行情况
[jacoco:report] MethodAnalyzer i.getBranches(): 1
[jacoco:report] MethodAnalyzer i.getCoveredBranches(): 1
//首先进行line
[jacoco:report] SourceNodeImpl increment (ICounter instructions, ICounter branches,int line)
[jacoco:report] SourceNodeImpl line != UNKNOWN_LINE
[jacoco:report] SourceNodeImpl incrementLine
[jacoco:report] SourceNodeImpl getLine 11
//incrementLine函数中 oldTotal和oldCovered时调用
[jacoco:report] LineImpl ICounter getInstructionCounter()
[jacoco:report] CounterImpl g