[Coverage] Record function body region

This commit is contained in:
Anastasiya Shadrina
2019-10-30 17:11:47 +07:00
committed by Sergey Bogolepov
parent 091de1b8bc
commit 7359775daf
2 changed files with 12 additions and 9 deletions
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.* import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.util.nameForIrSerialization
import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid import org.jetbrains.kotlin.ir.visitors.acceptChildrenVoid
import org.jetbrains.kotlin.ir.visitors.acceptVoid import org.jetbrains.kotlin.ir.visitors.acceptVoid
@@ -39,12 +40,10 @@ internal class CoverageRegionCollector(private val fileFilter: (IrFile) -> Boole
override fun visitFunction(declaration: IrFunction) { override fun visitFunction(declaration: IrFunction) {
if (!declaration.isInline && !declaration.isExternal && !declaration.isGeneratedByCompiler) { if (!declaration.isInline && !declaration.isExternal && !declaration.isGeneratedByCompiler) {
declaration.body?.let { val regionsCollector = IrFunctionRegionsCollector(fileFilter, file)
val regionsCollector = IrFunctionRegionsCollector(fileFilter, file) regionsCollector.visitFunction(declaration)
regionsCollector.visitBody(it) if (regionsCollector.regions.isNotEmpty()) {
if (regionsCollector.regions.isNotEmpty()) { functionRegions += FunctionRegions(declaration, regionsCollector.regions)
functionRegions += FunctionRegions(declaration, regionsCollector.regions)
}
} }
} }
// TODO: Decide how to work with local functions. Should they be process separately? // TODO: Decide how to work with local functions. Should they be process separately?
@@ -57,7 +56,7 @@ internal class CoverageRegionCollector(private val fileFilter: (IrFile) -> Boole
// So lets filter them. // So lets filter them.
private val IrDeclaration.isGeneratedByCompiler: Boolean private val IrDeclaration.isGeneratedByCompiler: Boolean
get() { get() {
return origin != IrDeclarationOrigin.DEFINED return origin != IrDeclarationOrigin.DEFINED || nameForIrSerialization.asString() == "Konan_start"
} }
/** /**
@@ -83,6 +82,10 @@ private class IrFunctionRegionsCollector(
} }
override fun visitFunction(declaration: IrFunction) { override fun visitFunction(declaration: IrFunction) {
declaration.body?.let {
recordRegion(it)
visitBody(it)
}
} }
override fun visitExpression(expression: IrExpression) { override fun visitExpression(expression: IrExpression) {
+2 -2
View File
@@ -3855,7 +3855,7 @@ if (UtilsKt.testTargetSupportsCodeCoverage(project)) {
binaryName = "CoverageBasic" binaryName = "CoverageBasic"
numberOfCoveredFunctions = 1 numberOfCoveredFunctions = 1
numberOfCoveredLines = 1 numberOfCoveredLines = 3
konanArtifacts { konanArtifacts {
program(binaryName, targets: [ target ]) { program(binaryName, targets: [ target ]) {
@@ -3892,7 +3892,7 @@ if (UtilsKt.testTargetSupportsCodeCoverage(project)) {
task coverage_smoke0(type: CoverageTest) { task coverage_smoke0(type: CoverageTest) {
binaryName = "CoverageSmoke0" binaryName = "CoverageSmoke0"
numberOfCoveredFunctions = 2 numberOfCoveredFunctions = 2
numberOfCoveredLines = 3 numberOfCoveredLines = 5
konanArtifacts { konanArtifacts {
program(binaryName, targets: [ target ]) { program(binaryName, targets: [ target ]) {