override fun compose()

in plugin-dotnet-agent/src/main/kotlin/jetbrains/buildServer/dotcover/DotCoverWorkflowComposer.kt [30:69]


    override fun compose(context: WorkflowContext, state: Unit, workflow: Workflow): Workflow {
        if (_dotCoverSettings.dotCoverMode.isDisabled) {
            return workflow
        }
        if (_dotCoverSettings.dotCoverHomePath.isNullOrBlank()) {
            _loggerService.writeWarning("Skip code coverage: dotCover is enabled however tool home path has not been set")
            return workflow
        }

        val baseCommandLineIterator = workflow.commandLines.iterator()

        return sequence {
            val executablePath = getDotCoverExecutablePath()

            // cover applicable base command line
            var dotCoverHomeOverriden = false
            while (baseCommandLineIterator.hasNext()) {
                val baseCommandLine = baseCommandLineIterator.next()
                if (!baseCommandLine.chain.any { it.target == TargetType.Tool }) {
                    yield(baseCommandLine)
                    continue
                }
                cover(baseCommandLine, context, executablePath, onSuccess = {
                    if (!dotCoverHomeOverriden) {
                        overrideDotCoverHome()
                        dotCoverHomeOverriden = true
                    }
                })
            }

            // fallback for backward compatibility
            if (_dotCoverSettings.coveragePostProcessingEnabled) {
                _loggerService.writeDebug(
                    "Coverage post-processing is enabled; " +
                    "the results will be processed before the build finishes"
                )
                return@sequence
            }
        }.let(::Workflow)
    }