[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
This commit is contained in:
Dmitriy Novozhilov
2022-06-02 14:40:45 +03:00
committed by teamcity
parent 9b56a01d74
commit 66c2679673
16 changed files with 138 additions and 46 deletions
@@ -6,6 +6,7 @@ plugins {
} }
dependencies { dependencies {
implementation(project(":kotlin-allopen-compiler-plugin.common"))
implementation(project(":kotlin-allopen-compiler-plugin.k1")) implementation(project(":kotlin-allopen-compiler-plugin.k1"))
implementation(project(":kotlin-allopen-compiler-plugin.k2")) implementation(project(":kotlin-allopen-compiler-plugin.k2"))
compileOnly(project(":compiler:plugin-api")) compileOnly(project(":compiler:plugin-api"))
@@ -6,9 +6,10 @@
package org.jetbrains.kotlin.allopen package org.jetbrains.kotlin.allopen
import com.intellij.mock.MockProject 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.ANNOTATION
import org.jetbrains.kotlin.allopen.AllOpenConfigurationKeys.PRESET 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.allopen.fir.FirAllOpenExtensionRegistrar
import org.jetbrains.kotlin.compiler.plugin.* import org.jetbrains.kotlin.compiler.plugin.*
import org.jetbrains.kotlin.config.CompilerConfiguration import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -23,29 +24,8 @@ object AllOpenConfigurationKeys {
class AllOpenCommandLineProcessor : CommandLineProcessor { class AllOpenCommandLineProcessor : CommandLineProcessor {
companion object { 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( val ANNOTATION_OPTION = CliOption(
"annotation", "<fqname>", "Annotation qualified names", ANNOTATION_OPTION_NAME, "<fqname>", "Annotation qualified names",
required = false, allowMultipleOccurrences = true required = false, allowMultipleOccurrences = true
) )
@@ -53,11 +33,9 @@ class AllOpenCommandLineProcessor : CommandLineProcessor {
"preset", "<name>", "Preset name (${SUPPORTED_PRESETS.keys.joinToString()})", "preset", "<name>", "Preset name (${SUPPORTED_PRESETS.keys.joinToString()})",
required = false, allowMultipleOccurrences = true 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 val pluginOptions = listOf(ANNOTATION_OPTION, PRESET_OPTION)
override fun processOption(option: AbstractCliOption, value: String, configuration: CompilerConfiguration) = when (option) { override fun processOption(option: AbstractCliOption, value: String, configuration: CompilerConfiguration) = when (option) {
@@ -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()
@@ -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"
}
+2
View File
@@ -6,11 +6,13 @@ plugins {
} }
dependencies { 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.cli")) { isTransitive = false }
embedded(project(":kotlin-allopen-compiler-plugin.k1")) { isTransitive = false } embedded(project(":kotlin-allopen-compiler-plugin.k1")) { isTransitive = false }
embedded(project(":kotlin-allopen-compiler-plugin.k2")) { isTransitive = false } embedded(project(":kotlin-allopen-compiler-plugin.k2")) { isTransitive = false }
testImplementation(project(":kotlin-allopen-compiler-plugin")) 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.k1"))
testImplementation(project(":kotlin-allopen-compiler-plugin.k2")) testImplementation(project(":kotlin-allopen-compiler-plugin.k2"))
testImplementation(project(":kotlin-allopen-compiler-plugin.cli")) testImplementation(project(":kotlin-allopen-compiler-plugin.cli"))
@@ -17,7 +17,7 @@ import org.jetbrains.kotlin.test.services.TestServices
class AllOpenEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) { class AllOpenEnvironmentConfigurator(testServices: TestServices) : EnvironmentConfigurator(testServices) {
override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) { override fun registerCompilerExtensions(project: Project, module: TestModule, configuration: CompilerConfiguration) {
val annotations = AbstractAllOpenDeclarationAttributeAltererExtension.ANNOTATIONS_FOR_TESTS + val annotations = AbstractAllOpenDeclarationAttributeAltererExtension.ANNOTATIONS_FOR_TESTS +
AllOpenCommandLineProcessor.SUPPORTED_PRESETS.flatMap { it.value } AllOpenPluginNames.SUPPORTED_PRESETS.flatMap { it.value }
DeclarationAttributeAltererExtension.registerExtension( DeclarationAttributeAltererExtension.registerExtension(
project, project,
@@ -17,6 +17,8 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.CompilerConfigurationKey import org.jetbrains.kotlin.config.CompilerConfigurationKey
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar
import org.jetbrains.kotlin.lombok.LombokConfigurationKeys.CONFIG_FILE 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.lombok.k2.FirLombokRegistrar
import org.jetbrains.kotlin.resolve.jvm.extensions.SyntheticJavaResolveExtension import org.jetbrains.kotlin.resolve.jvm.extensions.SyntheticJavaResolveExtension
import java.io.File import java.io.File
@@ -50,10 +52,8 @@ object LombokConfigurationKeys {
class LombokCommandLineProcessor : CommandLineProcessor { class LombokCommandLineProcessor : CommandLineProcessor {
companion object { companion object {
const val PLUGIN_ID = "org.jetbrains.kotlin.lombok"
val CONFIG_FILE_OPTION = CliOption( val CONFIG_FILE_OPTION = CliOption(
optionName = "config", optionName = CONFIG_OPTION_NAME,
valueDescription = "<path>", valueDescription = "<path>",
description = "Lombok configuration file location", description = "Lombok configuration file location",
required = false required = false
@@ -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"
}
+1
View File
@@ -6,6 +6,7 @@ plugins {
} }
dependencies { dependencies {
embedded(project(":kotlin-noarg-compiler-plugin.common"))
embedded(project(":kotlin-noarg-compiler-plugin.k1")) embedded(project(":kotlin-noarg-compiler-plugin.k1"))
embedded(project(":kotlin-noarg-compiler-plugin.k2")) embedded(project(":kotlin-noarg-compiler-plugin.k2"))
embedded(project(":kotlin-noarg-compiler-plugin.backend")) embedded(project(":kotlin-noarg-compiler-plugin.backend"))
+1
View File
@@ -6,6 +6,7 @@ plugins {
} }
dependencies { dependencies {
api(project(":kotlin-noarg-compiler-plugin.common"))
api(project(":kotlin-noarg-compiler-plugin.k1")) api(project(":kotlin-noarg-compiler-plugin.k1"))
api(project(":kotlin-noarg-compiler-plugin.k2")) api(project(":kotlin-noarg-compiler-plugin.k2"))
api(project(":kotlin-noarg-compiler-plugin.backend")) api(project(":kotlin-noarg-compiler-plugin.backend"))
@@ -18,16 +18,17 @@ import org.jetbrains.kotlin.container.useInstance
import org.jetbrains.kotlin.descriptors.ModuleDescriptor import org.jetbrains.kotlin.descriptors.ModuleDescriptor
import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor import org.jetbrains.kotlin.extensions.StorageComponentContainerContributor
import org.jetbrains.kotlin.fir.extensions.FirExtensionRegistrar 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.ANNOTATION
import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.INVOKE_INITIALIZERS import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.INVOKE_INITIALIZERS
import org.jetbrains.kotlin.noarg.NoArgConfigurationKeys.PRESET 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.diagnostic.CliNoArgDeclarationChecker
import org.jetbrains.kotlin.noarg.fir.FirNoArgExtensionRegistrar import org.jetbrains.kotlin.noarg.fir.FirNoArgExtensionRegistrar
import org.jetbrains.kotlin.platform.TargetPlatform import org.jetbrains.kotlin.platform.TargetPlatform
import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.platform.jvm.isJvm
import java.util.concurrent.Executors
object NoArgConfigurationKeys { object NoArgConfigurationKeys {
val ANNOTATION: CompilerConfigurationKey<List<String>> = val ANNOTATION: CompilerConfigurationKey<List<String>> =
@@ -42,12 +43,8 @@ object NoArgConfigurationKeys {
class NoArgCommandLineProcessor : CommandLineProcessor { class NoArgCommandLineProcessor : CommandLineProcessor {
companion object { companion object {
val SUPPORTED_PRESETS = mapOf(
"jpa" to listOf("javax.persistence.Entity", "javax.persistence.Embeddable", "javax.persistence.MappedSuperclass")
)
val ANNOTATION_OPTION = CliOption( val ANNOTATION_OPTION = CliOption(
"annotation", "<fqname>", "Annotation qualified names", ANNOTATION_OPTION_NAME, "<fqname>", "Annotation qualified names",
required = false, allowMultipleOccurrences = true required = false, allowMultipleOccurrences = true
) )
@@ -57,12 +54,10 @@ class NoArgCommandLineProcessor : CommandLineProcessor {
) )
val INVOKE_INITIALIZERS_OPTION = CliOption( val INVOKE_INITIALIZERS_OPTION = CliOption(
"invokeInitializers", "true/false", INVOKE_INITIALIZERS_OPTION_NAME, "true/false",
"Invoke instance initializers in a no-arg constructor", "Invoke instance initializers in a no-arg constructor",
required = false, allowMultipleOccurrences = false required = false, allowMultipleOccurrences = false
) )
const val PLUGIN_ID = "org.jetbrains.kotlin.noarg"
} }
override val pluginId = PLUGIN_ID override val pluginId = PLUGIN_ID
@@ -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()
@@ -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"
}
@@ -2,4 +2,9 @@ plugins {
kotlin("jvm") kotlin("jvm")
} }
publishJarsForIde(listOf(":kotlin-allopen-compiler-plugin.k1")) publishJarsForIde(
listOf(
":kotlin-allopen-compiler-plugin.common",
":kotlin-allopen-compiler-plugin.k1",
)
)
@@ -2,4 +2,10 @@ plugins {
kotlin("jvm") 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"
)
)
+7 -3
View File
@@ -189,11 +189,13 @@ include ":benchmarks",
":kotlin-android-extensions-runtime" ":kotlin-android-extensions-runtime"
include ":kotlin-allopen-compiler-plugin", include ":kotlin-allopen-compiler-plugin",
":kotlin-allopen-compiler-plugin.cli", ":kotlin-allopen-compiler-plugin.common",
":kotlin-allopen-compiler-plugin.k1", ":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", include ":kotlin-noarg-compiler-plugin",
":kotlin-noarg-compiler-plugin.common",
":kotlin-noarg-compiler-plugin.k1", ":kotlin-noarg-compiler-plugin.k1",
":kotlin-noarg-compiler-plugin.k2", ":kotlin-noarg-compiler-plugin.k2",
":kotlin-noarg-compiler-plugin.backend", ":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-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').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.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.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').projectDir = "$rootDir/plugins/lombok" as File
project(':kotlin-lombok-compiler-plugin.cli').projectDir = "$rootDir/plugins/lombok/lombok.cli" 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-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').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.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.k2').projectDir = "$rootDir/plugins/noarg/noarg.k2" as File
project(':kotlin-noarg-compiler-plugin.backend').projectDir = "$rootDir/plugins/noarg/noarg.backend" as File project(':kotlin-noarg-compiler-plugin.backend').projectDir = "$rootDir/plugins/noarg/noarg.backend" as File