From 5697be93fd247b1423f5addd14041c08e30d9a2d Mon Sep 17 00:00:00 2001 From: Youssef Shoaib Date: Tue, 21 Oct 2025 23:00:43 +0100 Subject: [PATCH 1/2] Add PluginRuntimeAnnotationsProvider --- .../plugin/template/runners/AbstractJvmBoxTest.kt | 3 +++ .../template/services/PluginAnnotationsProvider.kt | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) 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..560d1fc 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 @@ -2,6 +2,7 @@ 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.PluginRuntimeAnnotationsProvider import org.jetbrains.kotlin.test.FirParser import org.jetbrains.kotlin.test.builders.TestConfigurationBuilder import org.jetbrains.kotlin.test.directives.CodegenTestDirectives @@ -43,6 +44,8 @@ open class AbstractJvmBoxTest : AbstractFirBlackBoxCodegenTestBase(FirParser.Lig ::PluginAnnotationsProvider, ::ExtensionRegistrarConfigurator ) + + useCustomRuntimeClasspathProviders(::PluginRuntimeAnnotationsProvider) } } } 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..496422d 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,25 @@ 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.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 = + val annotationsRuntimeClasspath = System.getProperty("annotationsRuntime.classpath")?.split(File.pathSeparator)?.map(::File) ?: error("Unable to get a valid classpath from 'annotationsRuntime.classpath' property") } override fun configureCompilerConfiguration(configuration: CompilerConfiguration, module: TestModule) { - for (file in annotationsRuntimeClasspath) { - configuration.addJvmClasspathRoot(file) - } + configuration.addJvmClasspathRoots(annotationsRuntimeClasspath) } } + +class PluginRuntimeAnnotationsProvider(testServices: TestServices) : RuntimeClasspathProvider(testServices) { + override fun runtimeClassPaths(module: TestModule) = PluginAnnotationsProvider.annotationsRuntimeClasspath +} \ No newline at end of file From ac01ff39458d4f6ef8e87e717bba6d2599482d24 Mon Sep 17 00:00:00 2001 From: Youssef Shoaib Date: Wed, 22 Oct 2025 14:35:41 +0100 Subject: [PATCH 2/2] Apply suggested changes --- .../template/runners/AbstractJvmBoxTest.kt | 52 ++++++++----------- .../runners/AbstractJvmDiagnosticTest.kt | 43 +++++++-------- .../ExtensionRegistrarConfigurator.kt | 8 ++- .../services/PluginAnnotationsProvider.kt | 20 ++++--- 4 files changed, 58 insertions(+), 65 deletions(-) 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 560d1fc..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,8 +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.PluginRuntimeAnnotationsProvider +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 @@ -17,35 +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 - ) - - useCustomRuntimeClasspathProviders(::PluginRuntimeAnnotationsProvider) + +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 496422d..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 @@ -2,24 +2,28 @@ package org.jetbrains.kotlin.compiler.plugin.template.services 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 { - 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) { configuration.addJvmClasspathRoots(annotationsRuntimeClasspath) } } -class PluginRuntimeAnnotationsProvider(testServices: TestServices) : RuntimeClasspathProvider(testServices) { - override fun runtimeClassPaths(module: TestModule) = PluginAnnotationsProvider.annotationsRuntimeClasspath +private class PluginAnnotationsClasspathProvider(testServices: TestServices) : RuntimeClasspathProvider(testServices) { + override fun runtimeClassPaths(module: TestModule) = annotationsRuntimeClasspath } \ No newline at end of file