diff --git a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/model/AnalysisHandler.kt b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/model/AnalysisHandler.kt index c739c943505..58ee7bc267b 100644 --- a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/model/AnalysisHandler.kt +++ b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/model/AnalysisHandler.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.test.model import org.jetbrains.kotlin.test.Assertions +import org.jetbrains.kotlin.test.Constructor import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.assertions @@ -14,6 +15,9 @@ abstract class AnalysisHandler>( val failureDisablesNextSteps: Boolean, val doNotRunIfThereWerePreviousFailures: Boolean ) : ServicesAndDirectivesContainer { + open val additionalAfterAnalysisCheckers: List> + get() = emptyList() + protected val assertions: Assertions get() = testServices.assertions diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt index f599ab0db3c..6d30825e02c 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/impl/TestConfigurationImpl.kt @@ -11,10 +11,7 @@ import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.model.ComposedDirectivesContainer import org.jetbrains.kotlin.test.directives.model.DirectivesContainer import org.jetbrains.kotlin.test.directives.model.RegisteredDirectives -import org.jetbrains.kotlin.test.model.AfterAnalysisChecker -import org.jetbrains.kotlin.test.model.ResultingArtifact -import org.jetbrains.kotlin.test.model.ServicesAndDirectivesContainer -import org.jetbrains.kotlin.test.model.TestModule +import org.jetbrains.kotlin.test.model.* import org.jetbrains.kotlin.test.services.* import org.jetbrains.kotlin.test.services.impl.ModuleStructureExtractorImpl import org.jetbrains.kotlin.test.utils.TestDisposable @@ -93,14 +90,12 @@ class TestConfigurationImpl( constructor.invoke(testServices).also { it.registerDirectivesAndServices() } } - override val afterAnalysisCheckers: List = afterAnalysisCheckers.map { constructor -> - constructor.invoke(testServices).also { it.registerDirectivesAndServices() } - } - init { testServices.apply { - register(EnvironmentConfiguratorsProvider::class, EnvironmentConfiguratorsProvider(this@TestConfigurationImpl.environmentConfigurators)) - @OptIn(ExperimentalStdlibApi::class) + register( + EnvironmentConfiguratorsProvider::class, + EnvironmentConfiguratorsProvider(this@TestConfigurationImpl.environmentConfigurators) + ) val sourceFilePreprocessors = sourcePreprocessors.map { it.invoke(this@apply) } val sourceFileProvider = SourceFileProviderImpl(this, sourceFilePreprocessors) register(SourceFileProvider::class, sourceFileProvider) @@ -120,14 +115,28 @@ class TestConfigurationImpl( } } - override val steps: List> = steps - .map { it.createTestStep(testServices) } - .onEach { step -> - when (step) { - is TestStep.FacadeStep<*, *> -> step.facade.registerDirectivesAndServices() - is TestStep.HandlersStep<*> -> step.handlers.registerDirectivesAndServices() + override val steps: List> + override val afterAnalysisCheckers: List + + init { + val afterAnalysisCheckerConstructors = mutableSetOf>() + + this.steps = steps + .map { it.createTestStep(testServices) } + .onEach { step -> + when (step) { + is TestStep.FacadeStep<*, *> -> step.facade.registerDirectivesAndServices() + is TestStep.HandlersStep<*> -> { + step.handlers.registerDirectivesAndServices() + step.handlers.flatMapTo(afterAnalysisCheckerConstructors) { it.additionalAfterAnalysisCheckers } + } + } } + afterAnalysisCheckerConstructors.addAll(afterAnalysisCheckers) + this.afterAnalysisCheckers = afterAnalysisCheckerConstructors.map { constructor -> + constructor.invoke(testServices).also { it.registerDirectivesAndServices() } } + } // ---------------------------------- utils ----------------------------------