From 58110709f3b017a3edb5d884ef0a4e40811ce7ce Mon Sep 17 00:00:00 2001 From: pyos Date: Tue, 10 Aug 2021 12:36:40 +0200 Subject: [PATCH] Get rid of lambdas in AbstractForeignAnnotationsTestBase Also enable the features from the previous two commits --- .../AbstractFirForeignAnnotationsTest.kt | 65 ++++++----- .../runners/AbstractForeignAnnotationsTest.kt | 108 +++++++++--------- 2 files changed, 91 insertions(+), 82 deletions(-) diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirForeignAnnotationsTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirForeignAnnotationsTest.kt index d55fc9eceb9..e623b045f54 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirForeignAnnotationsTest.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractFirForeignAnnotationsTest.kt @@ -6,51 +6,56 @@ package org.jetbrains.kotlin.test.runners import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder +import org.jetbrains.kotlin.test.builders.configureFirHandlersStep import org.jetbrains.kotlin.test.builders.firFrontendStep import org.jetbrains.kotlin.test.builders.firHandlersStep +import org.jetbrains.kotlin.test.frontend.classic.handlers.FirJspecifyDiagnosticComplianceHandler import org.jetbrains.kotlin.test.frontend.fir.FirFailingTestSuppressor import org.jetbrains.kotlin.test.frontend.fir.handlers.* import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.preprocessors.JspecifyMarksCleanupPreprocessor import org.jetbrains.kotlin.test.services.fir.FirOldFrontendMetaConfigurator -private val configureFir: TestConfigurationBuilder.() -> Unit = { - globalDefaults { - frontend = FrontendKinds.FIR - } +abstract class AbstractFirForeignAnnotationsTestBase(kind: ForeignAnnotationsTestKind) : AbstractForeignAnnotationsTestBase(kind) { + override fun TestConfigurationBuilder.configureFrontend() { + globalDefaults { + frontend = FrontendKinds.FIR + } - useMetaInfoProcessors(::PsiLightTreeMetaInfoProcessor) - firFrontendStep() - firHandlersStep { - useHandlers( - ::FirDiagnosticsHandler, - ::FirDumpHandler, - ::FirCfgDumpHandler, - ::FirCfgConsistencyHandler, - ::FirNoImplicitTypesHandler, - ) - } + useMetaInfoProcessors(::PsiLightTreeMetaInfoProcessor) + firFrontendStep() + firHandlersStep { + useHandlers( + ::FirDiagnosticsHandler, + ::FirDumpHandler, + ::FirCfgDumpHandler, + ::FirCfgConsistencyHandler, + ::FirNoImplicitTypesHandler, + ) + } - forTestsMatching("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/*") { - // TODO: port JspecifyDiagnosticComplianceHandler (it doesn't really use the frontend artifact) - useSourcePreprocessor(::JspecifyMarksCleanupPreprocessor) - } + forTestsMatching("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/*") { + configureFirHandlersStep { + useHandlers(::FirJspecifyDiagnosticComplianceHandler) + } + useSourcePreprocessor(::JspecifyMarksCleanupPreprocessor) + } - forTestsMatching("compiler/testData/diagnostics/*") { - useAfterAnalysisCheckers( - ::FirIdenticalChecker, - ::FirFailingTestSuppressor, - ) - useMetaTestConfigurators(::FirOldFrontendMetaConfigurator) + forTestsMatching("compiler/testData/diagnostics/*") { + useAfterAnalysisCheckers( + ::FirIdenticalChecker, + ::FirFailingTestSuppressor, + ) + useMetaTestConfigurators(::FirOldFrontendMetaConfigurator) + } } } -abstract class AbstractFirForeignAnnotationsTestBase : AbstractForeignAnnotationsTestBase(configureFir) - -abstract class AbstractFirForeignAnnotationsSourceJavaTest : AbstractFirForeignAnnotationsTestBase() +abstract class AbstractFirForeignAnnotationsSourceJavaTest : + AbstractFirForeignAnnotationsTestBase(ForeignAnnotationsTestKind.SOURCE) abstract class AbstractFirForeignAnnotationsCompiledJavaTest : - AbstractForeignAnnotationsCompiledJavaTest(configureFir) + AbstractFirForeignAnnotationsTestBase(ForeignAnnotationsTestKind.COMPILED_JAVA) abstract class AbstractFirForeignAnnotationsCompiledJavaWithPsiClassReadingTest : - AbstractForeignAnnotationsCompiledJavaWithPsiClassReadingTest(configureFir) + AbstractFirForeignAnnotationsTestBase(ForeignAnnotationsTestKind.COMPILED_JAVA_WITH_PSI_CLASS_LOADING) diff --git a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt index e2bb43e37e2..6f0a4d8f4da 100644 --- a/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt +++ b/compiler/tests-common-new/tests/org/jetbrains/kotlin/test/runners/AbstractForeignAnnotationsTest.kt @@ -21,45 +21,24 @@ import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirective import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.USE_PSI_CLASS_FILES_READING import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_FOREIGN_ANNOTATIONS import org.jetbrains.kotlin.test.directives.JvmEnvironmentConfigurationDirectives.WITH_JSR305_TEST_ANNOTATIONS -import org.jetbrains.kotlin.test.frontend.classic.ClassicFrontendFacade import org.jetbrains.kotlin.test.frontend.classic.handlers.* import org.jetbrains.kotlin.test.model.DependencyKind import org.jetbrains.kotlin.test.model.FrontendKinds import org.jetbrains.kotlin.test.preprocessors.JspecifyMarksCleanupPreprocessor +import org.jetbrains.kotlin.test.services.TestServices import org.jetbrains.kotlin.test.services.configuration.* import org.jetbrains.kotlin.test.services.jvm.ForeignAnnotationAgainstCompiledJavaTestSuppressor import org.jetbrains.kotlin.test.services.jvm.PsiClassFilesReadingForCompiledJavaTestSuppressor import org.jetbrains.kotlin.test.services.sourceProviders.AdditionalDiagnosticsSourceFilesProvider import org.jetbrains.kotlin.test.services.sourceProviders.CoroutineHelpersSourceFilesProvider -private val configureClassicFrontend: TestConfigurationBuilder.() -> Unit = { - globalDefaults { - frontend = FrontendKinds.ClassicFrontend - } - - useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor) - classicFrontendStep() - classicFrontendHandlersStep { - useHandlers( - ::DeclarationsDumpHandler, - ::ClassicDiagnosticsHandler, - ) - } - - forTestsMatching("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/*") { - configureClassicFrontendHandlersStep { - useHandlers(::JspecifyDiagnosticComplianceHandler) - } - useSourcePreprocessor(::JspecifyMarksCleanupPreprocessor) - } - - useAfterAnalysisCheckers(::FirTestDataConsistencyHandler) +enum class ForeignAnnotationsTestKind(val compiledJava: Boolean, val psiClassLoading: Boolean) { + SOURCE(false, false), + COMPILED_JAVA(true, false), + COMPILED_JAVA_WITH_PSI_CLASS_LOADING(true, true) } -abstract class AbstractForeignAnnotationsTestBase( - private val configureFrontend: TestConfigurationBuilder.() -> Unit = configureClassicFrontend -) : AbstractKotlinCompilerTest() { - +abstract class AbstractForeignAnnotationsTestBase(private val kind: ForeignAnnotationsTestKind) : AbstractKotlinCompilerTest() { override fun TestConfigurationBuilder.configuration() { globalDefaults { targetPlatform = JvmPlatforms.defaultJvmPlatform @@ -69,10 +48,24 @@ abstract class AbstractForeignAnnotationsTestBase( defaultDirectives { +REPORT_JVM_DIAGNOSTICS_ON_FRONTEND +WITH_FOREIGN_ANNOTATIONS + if (kind.compiledJava) { + +ALL_JAVA_AS_BINARY + +SKIP_TXT + } + if (kind.psiClassLoading) { + +USE_PSI_CLASS_FILES_READING + } } enableMetaInfoHandler() + if (kind.compiledJava) { + useMetaTestConfigurators(::ForeignAnnotationAgainstCompiledJavaTestSuppressor) + } + if (kind.psiClassLoading) { + useMetaTestConfigurators(::PsiClassFilesReadingForCompiledJavaTestSuppressor) + } + useConfigurators( ::CommonEnvironmentConfigurator, ::JvmForeignAnnotationsConfigurator, @@ -107,39 +100,50 @@ abstract class AbstractForeignAnnotationsTestBase( } } } + + abstract fun TestConfigurationBuilder.configureFrontend() } -abstract class AbstractForeignAnnotationsSourceJavaTest : AbstractForeignAnnotationsTestBase() +private class FirForeignDiagnosticsTestDataConsistencyHandler(testServices: TestServices) : + FirTestDataConsistencyHandler(testServices) { -abstract class AbstractForeignAnnotationsCompiledJavaTest : AbstractForeignAnnotationsTestBase { - constructor() : super() - constructor(configureFrontend: TestConfigurationBuilder.() -> Unit) : super(configureFrontend) + override fun correspondingFirTest(): AbstractKotlinCompilerTest = + object : AbstractFirForeignAnnotationsSourceJavaTest() {} +} - override fun configure(builder: TestConfigurationBuilder) { - super.configure(builder) - with(builder) { - defaultDirectives { - +ALL_JAVA_AS_BINARY - +SKIP_TXT - } +abstract class AbstractOldFrontendForeignAnnotationsTestBase(kind: ForeignAnnotationsTestKind) : + AbstractForeignAnnotationsTestBase(kind) { - useMetaTestConfigurators(::ForeignAnnotationAgainstCompiledJavaTestSuppressor) + override fun TestConfigurationBuilder.configureFrontend() { + globalDefaults { + frontend = FrontendKinds.ClassicFrontend } + + useMetaInfoProcessors(::OldNewInferenceMetaInfoProcessor) + classicFrontendStep() + classicFrontendHandlersStep { + useHandlers( + ::DeclarationsDumpHandler, + ::ClassicDiagnosticsHandler, + ) + } + + forTestsMatching("compiler/testData/diagnostics/foreignAnnotationsTests/java8Tests/jspecify/*") { + configureClassicFrontendHandlersStep { + useHandlers(::JspecifyDiagnosticComplianceHandler) + } + useSourcePreprocessor(::JspecifyMarksCleanupPreprocessor) + } + + useAfterAnalysisCheckers(::FirForeignDiagnosticsTestDataConsistencyHandler) } } -abstract class AbstractForeignAnnotationsCompiledJavaWithPsiClassReadingTest : AbstractForeignAnnotationsCompiledJavaTest { - constructor() : super() - constructor(configureFrontend: TestConfigurationBuilder.() -> Unit) : super(configureFrontend) +abstract class AbstractForeignAnnotationsSourceJavaTest : + AbstractOldFrontendForeignAnnotationsTestBase(ForeignAnnotationsTestKind.SOURCE) - override fun configure(builder: TestConfigurationBuilder) { - super.configure(builder) - with(builder) { - defaultDirectives { - +USE_PSI_CLASS_FILES_READING - } +abstract class AbstractForeignAnnotationsCompiledJavaTest : + AbstractOldFrontendForeignAnnotationsTestBase(ForeignAnnotationsTestKind.COMPILED_JAVA) - useMetaTestConfigurators(::PsiClassFilesReadingForCompiledJavaTestSuppressor) - } - } -} +abstract class AbstractForeignAnnotationsCompiledJavaWithPsiClassReadingTest : + AbstractOldFrontendForeignAnnotationsTestBase(ForeignAnnotationsTestKind.COMPILED_JAVA_WITH_PSI_CLASS_LOADING)