[Coverage] Record function body region
This commit is contained in:
committed by
Sergey Bogolepov
parent
091de1b8bc
commit
7359775daf
+10
-7
@@ -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) {
|
||||||
|
|||||||
@@ -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 ]) {
|
||||||
|
|||||||
Reference in New Issue
Block a user