diff --git a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmBoxTest.kt b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmBoxTest.kt index e00158c..f8c1b11 100644 --- a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmBoxTest.kt +++ b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmBoxTest.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.compiler.plugin.template.runners -import org.jetbrains.kotlin.compiler.plugin.template.services.ExtensionRegistrarConfigurator -import org.jetbrains.kotlin.compiler.plugin.template.services.PluginAnnotationsProvider +import org.jetbrains.kotlin.compiler.plugin.template.services.configurePlugin import org.jetbrains.kotlin.test.FirParser import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.CodegenTestDirectives @@ -16,33 +15,27 @@ open class AbstractJvmBoxTest : AbstractFirBlackBoxCodegenTestBase(FirParser.Lig return EnvironmentBasedStandardLibrariesPathProvider } - override fun configure(builder: TestConfigurationBuilder) { - super.configure(builder) + override fun configure(builder: TestConfigurationBuilder) = with(builder) { + super.configure(this) + /* + * Containers of different directives, which can be used in tests: + * - ModuleStructureDirectives + * - LanguageSettingsDirectives + * - DiagnosticsDirectives + * - FirDiagnosticsDirectives + * - CodegenTestDirectives + * - JvmEnvironmentConfigurationDirectives + * + * All of them are located in `org.jetbrains.kotlin.test.directives` package + */ + defaultDirectives { + +CodegenTestDirectives.DUMP_IR + +FirDiagnosticsDirectives.FIR_DUMP + +JvmEnvironmentConfigurationDirectives.FULL_JDK - with(builder) { - /* - * Containers of different directives, which can be used in tests: - * - ModuleStructureDirectives - * - LanguageSettingsDirectives - * - DiagnosticsDirectives - * - FirDiagnosticsDirectives - * - CodegenTestDirectives - * - JvmEnvironmentConfigurationDirectives - * - * All of them are located in `org.jetbrains.kotlin.test.directives` package - */ - defaultDirectives { - +CodegenTestDirectives.DUMP_IR - +FirDiagnosticsDirectives.FIR_DUMP - +JvmEnvironmentConfigurationDirectives.FULL_JDK - - +CodegenTestDirectives.IGNORE_DEXING // Avoids loading R8 from the classpath. - } - - useConfigurators( - ::PluginAnnotationsProvider, - ::ExtensionRegistrarConfigurator - ) + +CodegenTestDirectives.IGNORE_DEXING // Avoids loading R8 from the classpath. } + + configurePlugin() } } diff --git a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmDiagnosticTest.kt b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmDiagnosticTest.kt index 91c0a2a..5669c78 100644 --- a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmDiagnosticTest.kt +++ b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/runners/AbstractJvmDiagnosticTest.kt @@ -1,7 +1,6 @@ package org.jetbrains.kotlin.compiler.plugin.template.runners -import org.jetbrains.kotlin.compiler.plugin.template.services.ExtensionRegistrarConfigurator -import org.jetbrains.kotlin.compiler.plugin.template.services.PluginAnnotationsProvider +import org.jetbrains.kotlin.compiler.plugin.template.services.configurePlugin import org.jetbrains.kotlin.test.FirParser import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.CodegenTestDirectives @@ -16,31 +15,25 @@ open class AbstractJvmDiagnosticTest : AbstractFirPhasedDiagnosticTest(FirParser return EnvironmentBasedStandardLibrariesPathProvider } - override fun configure(builder: TestConfigurationBuilder) { + override fun configure(builder: TestConfigurationBuilder) = with(builder) { super.configure(builder) + /* + * Containers of different directives, which can be used in tests: + * - ModuleStructureDirectives + * - LanguageSettingsDirectives + * - DiagnosticsDirectives + * - FirDiagnosticsDirectives + * + * All of them are located in `org.jetbrains.kotlin.test.directives` package + */ + defaultDirectives { + +FirDiagnosticsDirectives.FIR_DUMP + +FirDiagnosticsDirectives.DISABLE_GENERATED_FIR_TAGS + +JvmEnvironmentConfigurationDirectives.FULL_JDK - with(builder) { - /* - * Containers of different directives, which can be used in tests: - * - ModuleStructureDirectives - * - LanguageSettingsDirectives - * - DiagnosticsDirectives - * - FirDiagnosticsDirectives - * - * All of them are located in `org.jetbrains.kotlin.test.directives` package - */ - defaultDirectives { - +FirDiagnosticsDirectives.FIR_DUMP - +FirDiagnosticsDirectives.DISABLE_GENERATED_FIR_TAGS - +JvmEnvironmentConfigurationDirectives.FULL_JDK - - +CodegenTestDirectives.IGNORE_DEXING // Avoids loading R8 from the classpath. - } - - useConfigurators( - ::PluginAnnotationsProvider, - ::ExtensionRegistrarConfigurator - ) + +CodegenTestDirectives.IGNORE_DEXING // Avoids loading R8 from the classpath. } + + configurePlugin() } } diff --git a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/ExtensionRegistrarConfigurator.kt b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/ExtensionRegistrarConfigurator.kt index 4bb5bc1..0b9af52 100644 --- a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/ExtensionRegistrarConfigurator.kt +++ b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/ExtensionRegistrarConfigurator.kt @@ -6,11 +6,17 @@ import org.jetbrains.kotlin.compiler.plugin.template.SimplePluginRegistrar import org.jetbrains.kotlin.compiler.plugin.template.ir.SimpleIrGenerationExtension import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.EnvironmentConfigurator import org.jetbrains.kotlin.test.services.TestServices -class ExtensionRegistrarConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { +fun TestConfigurationBuilder.configurePlugin() { + useConfigurators(::ExtensionRegistrarConfigurator) + configureAnnotations() +} + +private class ExtensionRegistrarConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { override fun CompilerPluginRegistrar.ExtensionStorage.registerCompilerExtensions( module: TestModule, configuration: CompilerConfiguration diff --git a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/PluginAnnotationsProvider.kt b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/PluginAnnotationsProvider.kt index 0f6e080..0a0cebc 100644 --- a/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/PluginAnnotationsProvider.kt +++ b/compiler-plugin/test-fixtures/org/jetbrains/kotlin/compiler/plugin/template/services/PluginAnnotationsProvider.kt @@ -1,22 +1,29 @@ package org.jetbrains.kotlin.compiler.plugin.template.services -import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoot +import org.jetbrains.kotlin.cli.jvm.config.addJvmClasspathRoots import org.jetbrains.kotlin.config.CompilerConfiguration +import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.model.TestModule import org.jetbrains.kotlin.test.services.EnvironmentConfigurator +import org.jetbrains.kotlin.test.services.RuntimeClasspathProvider import org.jetbrains.kotlin.test.services.TestServices import java.io.File -class PluginAnnotationsProvider(testServices: TestServices) : EnvironmentConfigurator(testServices) { - companion object { - private val annotationsRuntimeClasspath = - System.getProperty("annotationsRuntime.classpath")?.split(File.pathSeparator)?.map(::File) - ?: error("Unable to get a valid classpath from 'annotationsRuntime.classpath' property") - } +private val annotationsRuntimeClasspath = + System.getProperty("annotationsRuntime.classpath")?.split(File.pathSeparator)?.map(::File) + ?: error("Unable to get a valid classpath from 'annotationsRuntime.classpath' property") + +fun TestConfigurationBuilder.configureAnnotations() { + useConfigurators(::PluginAnnotationsProvider) + useCustomRuntimeClasspathProviders(::PluginAnnotationsClasspathProvider) +} +private class PluginAnnotationsProvider(testServices: TestServices) : EnvironmentConfigurator(testServices) { override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) { - for (file in annotationsRuntimeClasspath) { - configuration.addJvmClasspathRoot(file) - } + configuration.addJvmClasspathRoots(annotationsRuntimeClasspath) } } + +private class PluginAnnotationsClasspathProvider(testServices: TestServices) : RuntimeClasspathProvider(testServices) { + override fun runtimeClassPaths(module: TestModule) = annotationsRuntimeClasspath +} \ No newline at end of file