override fun build()

in plugin-dotnet-agent/src/main/kotlin/jetbrains/buildServer/dotnet/commands/vstest/VSTestLoggerEnvironmentBuilder.kt [27:69]


    override fun build(context: DotnetCommandContext): EnvironmentBuildResult {
        val testReportingMode = _testReportingParameters.getMode(context)
        LOG.debug("Test reporting mode: $testReportingMode")

        if (testReportingMode.contains(TestReportingMode.Off)) {
            return EnvironmentBuildResult()
        }

        if (testReportingMode.contains(TestReportingMode.MultiAdapterPath)) {
            return EnvironmentBuildResult()
        }

        val targets = context.command.targetArguments.flatMap { it.arguments }.map { File(it.value) }.toList()
        LOG.debug("Targets: ${targets.joinToString(", ") { it.name }}")
        val checkoutDirectory = _pathsService.getPath(PathType.Checkout)
        LOG.debug("Checkout directory: $checkoutDirectory")
        val loggerDirectory = File(checkoutDirectory, "$directoryPrefix${_pathsService.uniqueName}")
        LOG.debug("Logger directory: $loggerDirectory")

        LOG.debug("Clean ...")
        _environmentCleaner.clean()
        LOG.debug("Analyze ...")
        _environmentAnalyzer.analyze(targets)

        val disposable = _loggerResolver.resolve(ToolType.VSTest).parentFile?.absoluteFile?.let {
            try {
                LOG.debug("Copy logger to \"$loggerDirectory\" from \"$it\"")
                _fileSystemService.copy(it, loggerDirectory)
                LOG.debug("Create \"$readmeFileName\" file in the directory \"$loggerDirectory\"")
                _fileSystemService.write(File(loggerDirectory, readmeFileName)) {
                    OutputStreamWriter(it).use {
                        it.write(readmeFileContent)
                    }
                }
            } catch (ex: Exception) {
                LOG.error(ex)
                _loggerService.writeErrorOutput("Failed to create logger directory \"$loggerDirectory\"")
            }

            disposableOf { _fileSystemService.remove(loggerDirectory) }
        } ?: emptyDisposable()
        return EnvironmentBuildResult(disposable = disposable)
    }