From 66c267967320104f9a5b0e33edbfa2c0ad9a6d66 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 2 Jun 2022 14:40:45 +0300 Subject: [PATCH] [Plugins] Extract parts of cli modules which were used from IDE into common modules This is needed to avoid IDE dependencies on cli modules, because they include FIR classes, which are inaccessible in regular Kotlin IDE plugin --- plugins/allopen/allopen.cli/build.gradle.kts | 1 + .../jetbrains/kotlin/allopen/AllOpenPlugin.kt | 30 +++-------------- .../allopen/allopen.common/build.gradle.kts | 20 ++++++++++++ .../kotlin/allopen/AllOpenPluginNames.kt | 32 +++++++++++++++++++ plugins/allopen/build.gradle.kts | 2 ++ .../allopen/AllOpenEnvironmentConfigurator.kt | 2 +- .../jetbrains/kotlin/lombok/LombokPlugin.kt | 6 ++-- .../kotlin/lombok/LombokPluginNames.kt | 11 +++++++ plugins/noarg/build.gradle.kts | 1 + plugins/noarg/noarg.cli/build.gradle.kts | 1 + .../org/jetbrains/kotlin/noarg/NoArgPlugin.kt | 17 ++++------ plugins/noarg/noarg.common/build.gradle.kts | 20 ++++++++++++ .../kotlin/noarg/NoArgPluginNames.kt | 16 ++++++++++ .../build.gradle.kts | 7 +++- .../build.gradle.kts | 8 ++++- settings.gradle | 10 ++++-- 16 files changed, 138 insertions(+), 46 deletions(-) create mode 100644 plugins/allopen/allopen.common/build.gradle.kts create mode 100644 plugins/allopen/allopen.common/src/org/jetbrains/kotlin/allopen/AllOpenPluginNames.kt create mode 100644 plugins/lombok/lombok.common/src/org/jetbrains/kotlin/lombok/LombokPluginNames.kt create mode 100644 plugins/noarg/noarg.common/build.gradle.kts create mode 100644 plugins/noarg/noarg.common/src/org/jetbrains/kotlin/noarg/NoArgPluginNames.kt diff --git a/plugins/allopen/allopen.cli/build.gradle.kts b/plugins/allopen/allopen.cli/build.gradle.kts index a338871ca7a..d033d581b36 100644 --- a/plugins/allopen/allopen.cli/build.gradle.kts +++ b/plugins/allopen/allopen.cli/build.gradle.kts @@ -6,6 +6,7 @@ plugins { } dependencies { + implementation(project(":kotlin-allopen-compiler-plugin.common")) implementation(project(":kotlin-allopen-compiler-plugin.k1")) implementation(project(":kotlin-allopen-compiler-plugin.k2")) compileOnly(project(":compiler:plugin-api")) diff --git a/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt b/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt index 9ddcf9311bb..e35189a4426 100644 --- a/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt +++ b/plugins/allopen/allopen.cli/src/org/jetbrains/kotlin/allopen/AllOpenPlugin.kt @@ -6,9 +6,10 @@ package org.jetbrains.kotlin.allopen import com.intellij.mock.MockProject -import org.jetbrains.kotlin.allopen.AllOpenCommandLineProcessor.Companion.SUPPORTED_PRESETS import org.jetbrains.kotlin.allopen.AllOpenConfigurationKeys.ANNOTATION import org.jetbrains.kotlin.allopen.AllOpenConfigurationKeys.PRESET +import org.jetbrains.kotlin.allopen.AllOpenPluginNames.ANNOTATION_OPTION_NAME +import org.jetbrains.kotlin.allopen.AllOpenPluginNames.SUPPORTED_PRESETS import org.jetbrains.kotlin.allopen.fir.FirAllOpenExtensionRegistrar import org.jetbrains.kotlin.compiler.plugin.* import org.jetbrains.kotlin.config.CompilerConfiguration @@ -23,29 +24,8 @@ object AllOpenConfigurationKeys { class AllOpenCommandLineProcessor : CommandLineProcessor { companion object { - val SUPPORTED_PRESETS = mapOf( - "spring" to listOf( - "org.springframework.stereotype.Component", - "org.springframework.transaction.annotation.Transactional", - "org.springframework.scheduling.annotation.Async", - "org.springframework.cache.annotation.Cacheable", - "org.springframework.boot.test.context.SpringBootTest", - "org.springframework.validation.annotation.Validated" - ), - "quarkus" to listOf( - "javax.enterprise.context.ApplicationScoped", - "javax.enterprise.context.RequestScoped" - ), - "micronaut" to listOf( - "io.micronaut.aop.Around", - "io.micronaut.aop.Introduction", - "io.micronaut.aop.InterceptorBinding", - "io.micronaut.aop.InterceptorBindingDefinitions" - ) - ) - val ANNOTATION_OPTION = CliOption( - "annotation", "", "Annotation qualified names", + ANNOTATION_OPTION_NAME, "", "Annotation qualified names", required = false, allowMultipleOccurrences = true ) @@ -53,11 +33,9 @@ class AllOpenCommandLineProcessor : CommandLineProcessor { "preset", "", "Preset name (${SUPPORTED_PRESETS.keys.joinToString()})", required = false, allowMultipleOccurrences = true ) - - const val PLUGIN_ID = "org.jetbrains.kotlin.allopen" } - override val pluginId = PLUGIN_ID + override val pluginId = AllOpenPluginNames.PLUGIN_ID override val pluginOptions = listOf(ANNOTATION_OPTION, PRESET_OPTION) override fun processOption(option: AbstractCliOption, value: String, configuration: CompilerConfiguration) = when (option) { diff --git a/plugins/allopen/allopen.common/build.gradle.kts b/plugins/allopen/allopen.common/build.gradle.kts new file mode 100644 index 00000000000..bc99536c407 --- /dev/null +++ b/plugins/allopen/allopen.common/build.gradle.kts @@ -0,0 +1,20 @@ +description = "Kotlin NoArg Compiler Plugin (Common)" + +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + compileOnly(project(":compiler:util")) + compileOnly(project(":core:compiler.common")) +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} + +runtimeJar() +javadocJar() +sourcesJar() diff --git a/plugins/allopen/allopen.common/src/org/jetbrains/kotlin/allopen/AllOpenPluginNames.kt b/plugins/allopen/allopen.common/src/org/jetbrains/kotlin/allopen/AllOpenPluginNames.kt new file mode 100644 index 00000000000..0d35710309a --- /dev/null +++ b/plugins/allopen/allopen.common/src/org/jetbrains/kotlin/allopen/AllOpenPluginNames.kt @@ -0,0 +1,32 @@ +/* + * Copyright 2010-2022 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.allopen + +object AllOpenPluginNames { + val SUPPORTED_PRESETS = mapOf( + "spring" to listOf( + "org.springframework.stereotype.Component", + "org.springframework.transaction.annotation.Transactional", + "org.springframework.scheduling.annotation.Async", + "org.springframework.cache.annotation.Cacheable", + "org.springframework.boot.test.context.SpringBootTest", + "org.springframework.validation.annotation.Validated" + ), + "quarkus" to listOf( + "javax.enterprise.context.ApplicationScoped", + "javax.enterprise.context.RequestScoped" + ), + "micronaut" to listOf( + "io.micronaut.aop.Around", + "io.micronaut.aop.Introduction", + "io.micronaut.aop.InterceptorBinding", + "io.micronaut.aop.InterceptorBindingDefinitions" + ) + ) + + const val PLUGIN_ID = "org.jetbrains.kotlin.allopen" + const val ANNOTATION_OPTION_NAME = "annotation" +} diff --git a/plugins/allopen/build.gradle.kts b/plugins/allopen/build.gradle.kts index 43aa4c174a8..b6b8f2fa420 100644 --- a/plugins/allopen/build.gradle.kts +++ b/plugins/allopen/build.gradle.kts @@ -6,11 +6,13 @@ plugins { } dependencies { + embedded(project(":kotlin-allopen-compiler-plugin.common")) { isTransitive = false } embedded(project(":kotlin-allopen-compiler-plugin.cli")) { isTransitive = false } embedded(project(":kotlin-allopen-compiler-plugin.k1")) { isTransitive = false } embedded(project(":kotlin-allopen-compiler-plugin.k2")) { isTransitive = false } testImplementation(project(":kotlin-allopen-compiler-plugin")) + testImplementation(project(":kotlin-allopen-compiler-plugin.common")) testImplementation(project(":kotlin-allopen-compiler-plugin.k1")) testImplementation(project(":kotlin-allopen-compiler-plugin.k2")) testImplementation(project(":kotlin-allopen-compiler-plugin.cli")) diff --git a/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt b/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt index 171362424d6..ed901dbe5b5 100644 --- a/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt +++ b/plugins/allopen/test/org/jetbrains/kotlin/allopen/AllOpenEnvironmentConfigurator.kt @@ -17,7 +17,7 @@ import org.jetbrains.kotlin.test.services.TestServices class AllOpenEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) { val annotations = AbstractAllOpenDeclarationAttributeAltererExtension.ANNOTATIONS_FOR_TESTS + - AllOpenCommandLineProcessor.SUPPORTED_PRESETS.flatMap { it.value } + AllOpenPluginNames.SUPPORTED_PRESETS.flatMap { it.value } DeclarationAttributeAltererExtension.registerExtension( project, diff --git a/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt b/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt index 38f0166497c..c83b1021e63 100644 --- a/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt +++ b/plugins/lombok/lombok.cli/src/org/jetbrains/kotlin/lombok/LombokPlugin.kt @@ -17,6 +17,8 @@ import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfigurationKey import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.lombok.LombokConfigurationKeys.CONFIG_FILE +import org.jetbrains.kotlin.lombok.LombokPluginNames.CONFIG_OPTION_NAME +import org.jetbrains.kotlin.lombok.LombokPluginNames.PLUGIN_ID import org.jetbrains.kotlin.lombok.k2.FirLombokRegistrar import org.jetbrains.kotlin.resolve.jvm.extensions.SyntheticJavaResolveExtension import java.io.File @@ -50,10 +52,8 @@ object LombokConfigurationKeys { class LombokCommandLineProcessor : CommandLineProcessor { companion object { - const val PLUGIN_ID = "org.jetbrains.kotlin.lombok" - val CONFIG_FILE_OPTION = CliOption( - optionName = "config", + optionName = CONFIG_OPTION_NAME, valueDescription = "", description = "Lombok configuration file location", required = false diff --git a/plugins/lombok/lombok.common/src/org/jetbrains/kotlin/lombok/LombokPluginNames.kt b/plugins/lombok/lombok.common/src/org/jetbrains/kotlin/lombok/LombokPluginNames.kt new file mode 100644 index 00000000000..d99b97a64ef --- /dev/null +++ b/plugins/lombok/lombok.common/src/org/jetbrains/kotlin/lombok/LombokPluginNames.kt @@ -0,0 +1,11 @@ +/* + * Copyright 2010-2022 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.lombok + +object LombokPluginNames { + const val PLUGIN_ID = "org.jetbrains.kotlin.lombok" + const val CONFIG_OPTION_NAME = "config" +} diff --git a/plugins/noarg/build.gradle.kts b/plugins/noarg/build.gradle.kts index 9bb4cedb86e..045947cde1c 100644 --- a/plugins/noarg/build.gradle.kts +++ b/plugins/noarg/build.gradle.kts @@ -6,6 +6,7 @@ plugins { } dependencies { + embedded(project(":kotlin-noarg-compiler-plugin.common")) embedded(project(":kotlin-noarg-compiler-plugin.k1")) embedded(project(":kotlin-noarg-compiler-plugin.k2")) embedded(project(":kotlin-noarg-compiler-plugin.backend")) diff --git a/plugins/noarg/noarg.cli/build.gradle.kts b/plugins/noarg/noarg.cli/build.gradle.kts index b79ad3d8fa1..4ce43ad4973 100644 --- a/plugins/noarg/noarg.cli/build.gradle.kts +++ b/plugins/noarg/noarg.cli/build.gradle.kts @@ -6,6 +6,7 @@ plugins { } dependencies { + api(project(":kotlin-noarg-compiler-plugin.common")) api(project(":kotlin-noarg-compiler-plugin.k1")) api(project(":kotlin-noarg-compiler-plugin.k2")) api(project(":kotlin-noarg-compiler-plugin.backend")) diff --git a/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt b/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt index f01a3508c25..5d4f041c58c 100644 --- a/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt +++ b/plugins/noarg/noarg.cli/src/org/jetbrains/kotlin/noarg/NoArgPlugin.kt @@ -18,16 +18,17 @@ import org.jetbrains.kotlin.container.useInstance import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar -import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrarAdapter -import org.jetbrains.kotlin.noarg.NoArgCommandLineProcessor.Companion.SUPPORTED_PRESETS import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.ANNOTATION import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.INVOKE_INITIALIZERS import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.PRESET +import org.jetbrains.kotlin.noarg.NoArgPluginNames.ANNOTATION_OPTION_NAME +import org.jetbrains.kotlin.noarg.NoArgPluginNames.INVOKE_INITIALIZERS_OPTION_NAME +import org.jetbrains.kotlin.noarg.NoArgPluginNames.PLUGIN_ID +import org.jetbrains.kotlin.noarg.NoArgPluginNames.SUPPORTED_PRESETS import org.jetbrains.kotlin.noarg.diagnostic.CliNoArgDeclarationChecker import org.jetbrains.kotlin.noarg.fir.FirNoArgExtensionRegistrar import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.jvm.isJvm -import java.util.concurrent.Executors object NoArgConfigurationKeys { val ANNOTATION: CompilerConfigurationKey> = @@ -42,12 +43,8 @@ object NoArgConfigurationKeys { class NoArgCommandLineProcessor : CommandLineProcessor { companion object { - val SUPPORTED_PRESETS = mapOf( - "jpa" to listOf("javax.persistence.Entity", "javax.persistence.Embeddable", "javax.persistence.MappedSuperclass") - ) - val ANNOTATION_OPTION = CliOption( - "annotation", "", "Annotation qualified names", + ANNOTATION_OPTION_NAME, "", "Annotation qualified names", required = false, allowMultipleOccurrences = true ) @@ -57,12 +54,10 @@ class NoArgCommandLineProcessor : CommandLineProcessor { ) val INVOKE_INITIALIZERS_OPTION = CliOption( - "invokeInitializers", "true/false", + INVOKE_INITIALIZERS_OPTION_NAME, "true/false", "Invoke instance initializers in a no-arg constructor", required = false, allowMultipleOccurrences = false ) - - const val PLUGIN_ID = "org.jetbrains.kotlin.noarg" } override val pluginId = PLUGIN_ID diff --git a/plugins/noarg/noarg.common/build.gradle.kts b/plugins/noarg/noarg.common/build.gradle.kts new file mode 100644 index 00000000000..bc99536c407 --- /dev/null +++ b/plugins/noarg/noarg.common/build.gradle.kts @@ -0,0 +1,20 @@ +description = "Kotlin NoArg Compiler Plugin (Common)" + +plugins { + kotlin("jvm") + id("jps-compatible") +} + +dependencies { + compileOnly(project(":compiler:util")) + compileOnly(project(":core:compiler.common")) +} + +sourceSets { + "main" { projectDefault() } + "test" { none() } +} + +runtimeJar() +javadocJar() +sourcesJar() diff --git a/plugins/noarg/noarg.common/src/org/jetbrains/kotlin/noarg/NoArgPluginNames.kt b/plugins/noarg/noarg.common/src/org/jetbrains/kotlin/noarg/NoArgPluginNames.kt new file mode 100644 index 00000000000..28734cb367d --- /dev/null +++ b/plugins/noarg/noarg.common/src/org/jetbrains/kotlin/noarg/NoArgPluginNames.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2022 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.noarg + +object NoArgPluginNames { + val SUPPORTED_PRESETS = mapOf( + "jpa" to listOf("javax.persistence.Entity", "javax.persistence.Embeddable", "javax.persistence.MappedSuperclass") + ) + + const val PLUGIN_ID = "org.jetbrains.kotlin.noarg" + const val ANNOTATION_OPTION_NAME = "annotation" + const val INVOKE_INITIALIZERS_OPTION_NAME = "invokeInitializers" +} diff --git a/prepare/ide-plugin-dependencies/allopen-compiler-plugin-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/allopen-compiler-plugin-for-ide/build.gradle.kts index d5cecf60e4e..76d37d76449 100644 --- a/prepare/ide-plugin-dependencies/allopen-compiler-plugin-for-ide/build.gradle.kts +++ b/prepare/ide-plugin-dependencies/allopen-compiler-plugin-for-ide/build.gradle.kts @@ -2,4 +2,9 @@ plugins { kotlin("jvm") } -publishJarsForIde(listOf(":kotlin-allopen-compiler-plugin.k1")) +publishJarsForIde( + listOf( + ":kotlin-allopen-compiler-plugin.common", + ":kotlin-allopen-compiler-plugin.k1", + ) +) diff --git a/prepare/ide-plugin-dependencies/noarg-compiler-plugin-for-ide/build.gradle.kts b/prepare/ide-plugin-dependencies/noarg-compiler-plugin-for-ide/build.gradle.kts index 54d9fa30da3..39e4283c662 100644 --- a/prepare/ide-plugin-dependencies/noarg-compiler-plugin-for-ide/build.gradle.kts +++ b/prepare/ide-plugin-dependencies/noarg-compiler-plugin-for-ide/build.gradle.kts @@ -2,4 +2,10 @@ plugins { kotlin("jvm") } -publishJarsForIde(listOf(":kotlin-noarg-compiler-plugin.k1", ":kotlin-noarg-compiler-plugin.backend")) +publishJarsForIde( + listOf( + ":kotlin-noarg-compiler-plugin.common", + ":kotlin-noarg-compiler-plugin.k1", + ":kotlin-noarg-compiler-plugin.backend" + ) +) diff --git a/settings.gradle b/settings.gradle index 72d783654d6..2ffa9441e67 100644 --- a/settings.gradle +++ b/settings.gradle @@ -189,11 +189,13 @@ include ":benchmarks", ":kotlin-android-extensions-runtime" include ":kotlin-allopen-compiler-plugin", - ":kotlin-allopen-compiler-plugin.cli", + ":kotlin-allopen-compiler-plugin.common", ":kotlin-allopen-compiler-plugin.k1", - ":kotlin-allopen-compiler-plugin.k2" + ":kotlin-allopen-compiler-plugin.k2", + ":kotlin-allopen-compiler-plugin.cli" include ":kotlin-noarg-compiler-plugin", + ":kotlin-noarg-compiler-plugin.common", ":kotlin-noarg-compiler-plugin.k1", ":kotlin-noarg-compiler-plugin.k2", ":kotlin-noarg-compiler-plugin.backend", @@ -693,9 +695,10 @@ project(':kotlin-parcelize-compiler').projectDir = "$rootDir/prepare/parcelize-c project(':kotlin-android-extensions-runtime').projectDir = "$rootDir/plugins/android-extensions/android-extensions-runtime" as File project(':kotlin-allopen-compiler-plugin').projectDir = "$rootDir/plugins/allopen" as File -project(':kotlin-allopen-compiler-plugin.cli').projectDir = "$rootDir/plugins/allopen/allopen.cli" as File +project(':kotlin-allopen-compiler-plugin.common').projectDir = "$rootDir/plugins/allopen/allopen.common" as File project(':kotlin-allopen-compiler-plugin.k1').projectDir = "$rootDir/plugins/allopen/allopen.k1" as File project(':kotlin-allopen-compiler-plugin.k2').projectDir = "$rootDir/plugins/allopen/allopen.k2" as File +project(':kotlin-allopen-compiler-plugin.cli').projectDir = "$rootDir/plugins/allopen/allopen.cli" as File project(':kotlin-lombok-compiler-plugin').projectDir = "$rootDir/plugins/lombok" as File project(':kotlin-lombok-compiler-plugin.cli').projectDir = "$rootDir/plugins/lombok/lombok.cli" as File @@ -704,6 +707,7 @@ project(':kotlin-lombok-compiler-plugin.k2').projectDir = "$rootDir/plugins/lomb project(':kotlin-lombok-compiler-plugin.common').projectDir = "$rootDir/plugins/lombok/lombok.common" as File project(':kotlin-noarg-compiler-plugin').projectDir = "$rootDir/plugins/noarg" as File +project(':kotlin-noarg-compiler-plugin.common').projectDir = "$rootDir/plugins/noarg/noarg.common" as File project(':kotlin-noarg-compiler-plugin.k1').projectDir = "$rootDir/plugins/noarg/noarg.k1" as File project(':kotlin-noarg-compiler-plugin.k2').projectDir = "$rootDir/plugins/noarg/noarg.k2" as File project(':kotlin-noarg-compiler-plugin.backend').projectDir = "$rootDir/plugins/noarg/noarg.backend" as File