From f26300a43e92d34650d243521f10ebbced8e76e9 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Thu, 26 Oct 2023 19:02:11 +0200 Subject: [PATCH] [LL FIR] allow muting tests with `MUTE_LL_FIR` directive in all compiler-based tests --- .../based/AbstractCompilerBasedTestForFir.kt | 2 + ...stractLLFirBlackBoxCodegenBasedTestBase.kt | 33 +---------------- .../based/LLFirCompiledBasedTestSuppressor.kt | 37 +++++++++++++++++++ 3 files changed, 41 insertions(+), 31 deletions(-) create mode 100644 analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirCompiledBasedTestSuppressor.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt index 39af6ab08ce..2ebc3c37fa0 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/compiler/based/AbstractCompilerBasedTestForFir.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionService import org.jetbrains.kotlin.analysis.low.level.api.fir.api.DiagnosticCheckerFilter import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirFile +import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.LLFirCompiledBasedTestSuppressor import org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based.facades.LLFirAnalyzerFacadeFactory import org.jetbrains.kotlin.analysis.low.level.api.fir.test.base.FirLowLevelCompilerBasedTestConfigurator import org.jetbrains.kotlin.analysis.project.structure.KtModule @@ -59,6 +60,7 @@ abstract class AbstractCompilerBasedTestForFir : AbstractCompilerBasedTest() { useMetaTestConfigurators(::LLFirMetaTestConfigurator) useAfterAnalysisCheckers(::LLFirIdenticalChecker) useAfterAnalysisCheckers(::LLFirDivergenceCommentChecker) + useAfterAnalysisCheckers(::LLFirCompiledBasedTestSuppressor) } open fun TestConfigurationBuilder.configureTest() {} diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/AbstractLLFirBlackBoxCodegenBasedTestBase.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/AbstractLLFirBlackBoxCodegenBasedTestBase.kt index fe43f553112..20e96e2fd2d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/AbstractLLFirBlackBoxCodegenBasedTestBase.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/AbstractLLFirBlackBoxCodegenBasedTestBase.kt @@ -9,12 +9,9 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.compiler.based.AbstractCo import org.jetbrains.kotlin.test.InTextDirectivesUtils import org.jetbrains.kotlin.test.TargetBackend import org.jetbrains.kotlin.test.TestConfiguration -import org.jetbrains.kotlin.test.WrappedException import org.jetbrains.kotlin.test.backend.BlackBoxCodegenSuppressor import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.builders.firHandlersStep -import org.jetbrains.kotlin.test.directives.model.DirectivesContainer -import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer import org.jetbrains.kotlin.test.frontend.fir.handlers.FirCfgDumpHandler import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDiagnosticsHandler import org.jetbrains.kotlin.test.frontend.fir.handlers.FirDumpHandler @@ -23,10 +20,8 @@ import org.jetbrains.kotlin.test.frontend.fir.handlers.FirScopeDumpHandler import org.jetbrains.kotlin.test.model.AfterAnalysisChecker import org.jetbrains.kotlin.test.runners.codegen.baseFirBlackBoxCodegenTestDirectivesConfiguration import org.jetbrains.kotlin.test.runners.codegen.configureModernJavaWhenNeeded -import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.configuration.CommonEnvironmentConfigurator import org.jetbrains.kotlin.test.services.configuration.JvmEnvironmentConfigurator -import org.jetbrains.kotlin.test.services.moduleStructure import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider import org.jetbrains.kotlin.test.services.sourceProviders.CodegenHelpersSourceFilesProvider import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider @@ -62,7 +57,7 @@ abstract class AbstractLLFirBlackBoxCodegenBasedTestBase : AbstractCompilerBased ) } - useAfterAnalysisCheckers(::LLFirBlackBoxCodegenSuppressor, ::BlackBoxCodegenSuppressor) + useAfterAnalysisCheckers(::BlackBoxCodegenSuppressor) } override fun shouldSkipTest(filePath: String, configuration: TestConfiguration): Boolean { @@ -78,28 +73,4 @@ abstract class AbstractLLFirBlackBoxCodegenBasedTestBase : AbstractCompilerBased InTextDirectivesUtils.IGNORE_BACKEND_K2_DIRECTIVE_PREFIX, ) } -} - -private class LLFirBlackBoxCodegenSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) { - override val directiveContainers: List get() = listOf(Companion) - - override fun suppressIfNeeded(failedAssertions: List): List { - if (MUTE_LL_FIR !in testServices.moduleStructure.allDirectives) return failedAssertions - - return if (failedAssertions.isEmpty()) { - listOf( - AssertionError( - "Test contains $MUTE_LL_FIR directive but no errors was reported. Please remove directive", - ).wrap() - ) - } else { - emptyList() - } - } - - private companion object : SimpleDirectivesContainer() { - val MUTE_LL_FIR by stringDirective( - "Temporary mute Low Level FIR implementation due to some error. YT ticket must be provided" - ) - } -} +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirCompiledBasedTestSuppressor.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirCompiledBasedTestSuppressor.kt new file mode 100644 index 00000000000..cbc88a26eb6 --- /dev/null +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirCompiledBasedTestSuppressor.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.analysis.low.level.api.fir.diagnostic.compiler.based + +import org.jetbrains.kotlin.test.WrappedException +import org.jetbrains.kotlin.test.directives.model.DirectivesContainer +import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer +import org.jetbrains.kotlin.test.model.AfterAnalysisChecker +import org.jetbrains.kotlin.test.services.TestServices +import org.jetbrains.kotlin.test.services.moduleStructure + +class LLFirCompiledBasedTestSuppressor(testServices: TestServices) : AfterAnalysisChecker(testServices) { + override val directiveContainers: List get() = listOf(Companion) + + override fun suppressIfNeeded(failedAssertions: List): List { + if (MUTE_LL_FIR !in testServices.moduleStructure.allDirectives) return failedAssertions + + return if (failedAssertions.isEmpty()) { + listOf( + AssertionError( + "Test contains $MUTE_LL_FIR directive but no errors was reported. Please remove directive", + ).wrap() + ) + } else { + emptyList() + } + } + + private companion object : SimpleDirectivesContainer() { + val MUTE_LL_FIR by stringDirective( + "Temporary mute Low Level FIR implementation due to some error. YT ticket must be provided" + ) + } +}