[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 {
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"))
@@ -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", "<fqname>", "Annotation qualified names",
ANNOTATION_OPTION_NAME, "<fqname>", "Annotation qualified names",
required = false, allowMultipleOccurrences = true
)
@@ -53,11 +33,9 @@ class AllOpenCommandLineProcessor : CommandLineProcessor {
"preset", "<name>", "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) {
@@ -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 {
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"))
@@ -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,
@@ -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 = "<path>",
description = "Lombok configuration file location",
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 {
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"))
+1
View File
@@ -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"))
@@ -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<List<String>> =
@@ -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", "<fqname>", "Annotation qualified names",
ANNOTATION_OPTION_NAME, "<fqname>", "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
@@ -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")
}
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")
}
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"
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