Get rid of kotlinPluginVersion in the constructors throughout the plugin

We passed the kotlinPluginVersion which was only used for a single
purpose in countless constructors.

In fact, the plugin version is easy to load at the call site, as it gets
loaded from the plugin's resources.

So rework the plugin version loading code so that it doesn't rely on the
applied plugin, and don't pass the plugin version in all those
constructors.
This commit is contained in:
Sergey Igushkin
2021-03-31 13:06:31 +03:00
parent 2a5d511b66
commit 4cb6303fa8
21 changed files with 124 additions and 177 deletions
@@ -180,8 +180,7 @@ internal abstract class KotlinSourceSetProcessor<T : AbstractKotlinCompile<*>>(
internal class Kotlin2JvmSourceSetProcessor(
tasksProvider: KotlinTasksProvider,
kotlinCompilation: KotlinCompilationData<*>,
private val kotlinPluginVersion: String
kotlinCompilation: KotlinCompilationData<*>
) : KotlinSourceSetProcessor<KotlinCompile>(
tasksProvider, "Compiles the $kotlinCompilation.", kotlinCompilation
) {
@@ -200,7 +199,7 @@ internal class Kotlin2JvmSourceSetProcessor(
ScriptingGradleSubplugin.configureForSourceSet(project, kotlinCompilation.compilationPurpose)
project.whenEvaluated {
val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinPluginVersion)
val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
if (kotlinCompilation is KotlinCompilation<*>) // FIXME support compiler plugins with PM20
subpluginEnvironment.addSubpluginOptions(project, kotlinCompilation)
@@ -233,8 +232,7 @@ internal fun KotlinCompilationOutput.addClassesDir(classesDirProvider: () -> Fil
internal class Kotlin2JsSourceSetProcessor(
tasksProvider: KotlinTasksProvider,
kotlinCompilation: KotlinCompilationData<*>,
private val kotlinPluginVersion: String
kotlinCompilation: KotlinCompilationData<*>
) : KotlinSourceSetProcessor<Kotlin2JsCompile>(
tasksProvider,
taskDescription = "Compiles the Kotlin sources in $kotlinCompilation to JavaScript.",
@@ -290,7 +288,7 @@ internal class Kotlin2JsSourceSetProcessor(
}
}
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinPluginVersion)
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
if (kotlinCompilation is KotlinCompilation<*>) { // FIXME support compiler plugins with PM20
subpluginEnvironment.addSubpluginOptions(project, kotlinCompilation)
}
@@ -300,8 +298,7 @@ internal class Kotlin2JsSourceSetProcessor(
internal class KotlinJsIrSourceSetProcessor(
tasksProvider: KotlinTasksProvider,
kotlinCompilation: AbstractKotlinCompilation<*>,
private val kotlinPluginVersion: String
kotlinCompilation: AbstractKotlinCompilation<*>
) : KotlinSourceSetProcessor<Kotlin2JsCompile>(
tasksProvider, taskDescription = "Compiles the Kotlin sources in $kotlinCompilation to JavaScript.",
kotlinCompilation = kotlinCompilation
@@ -350,7 +347,7 @@ internal class KotlinJsIrSourceSetProcessor(
}
project.whenEvaluated {
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinPluginVersion)
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
subpluginEnvironment.addSubpluginOptions(project, kotlinCompilation)
}
}
@@ -358,8 +355,7 @@ internal class KotlinJsIrSourceSetProcessor(
internal class KotlinCommonSourceSetProcessor(
compilation: KotlinCompilationData<*>,
tasksProvider: KotlinTasksProvider,
private val kotlinPluginVersion: String
tasksProvider: KotlinTasksProvider
) : KotlinSourceSetProcessor<KotlinCompileCommon>(
tasksProvider, taskDescription = "Compiles the kotlin sources in $compilation to Metadata.", kotlinCompilation = compilation
) {
@@ -372,7 +368,7 @@ internal class KotlinCommonSourceSetProcessor(
if (kotlinCompilation is AbstractKotlinCompilation<*>) {
project.whenEvaluated {
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinPluginVersion)
val subpluginEnvironment: SubpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
subpluginEnvironment.addSubpluginOptions(project, kotlinCompilation)
}
}
@@ -389,24 +385,23 @@ internal class KotlinCommonSourceSetProcessor(
internal abstract class AbstractKotlinPlugin(
val tasksProvider: KotlinTasksProvider,
protected val kotlinPluginVersion: String,
val registry: ToolingModelBuilderRegistry
) : Plugin<Project> {
internal abstract fun buildSourceSetProcessor(
project: Project,
compilation: AbstractKotlinCompilation<*>,
kotlinPluginVersion: String
compilation: AbstractKotlinCompilation<*>
): KotlinSourceSetProcessor<*>
override fun apply(project: Project) {
val kotlinPluginVersion = project.getKotlinPluginVersion()
project.plugins.apply(JavaPlugin::class.java)
val target = (project.kotlinExtension as KotlinSingleJavaTargetExtension).target
configureTarget(
target,
{ compilation -> buildSourceSetProcessor(project, compilation, kotlinPluginVersion) }
{ compilation -> buildSourceSetProcessor(project, compilation) }
)
applyUserDefinedAttributes(target)
@@ -601,16 +596,15 @@ internal abstract class AbstractKotlinPlugin(
}
internal open class KotlinPlugin(
kotlinPluginVersion: String,
registry: ToolingModelBuilderRegistry
) : AbstractKotlinPlugin(KotlinTasksProvider(), kotlinPluginVersion, registry) {
) : AbstractKotlinPlugin(KotlinTasksProvider(), registry) {
companion object {
private const val targetName = "" // use empty suffix for the task names
}
override fun buildSourceSetProcessor(project: Project, compilation: AbstractKotlinCompilation<*>, kotlinPluginVersion: String) =
Kotlin2JvmSourceSetProcessor(tasksProvider, compilation, kotlinPluginVersion)
override fun buildSourceSetProcessor(project: Project, compilation: AbstractKotlinCompilation<*>) =
Kotlin2JvmSourceSetProcessor(tasksProvider, compilation)
override fun apply(project: Project) {
val target =
@@ -632,9 +626,8 @@ internal open class KotlinPlugin(
}
internal open class KotlinCommonPlugin(
kotlinPluginVersion: String,
registry: ToolingModelBuilderRegistry
) : AbstractKotlinPlugin(KotlinTasksProvider(), kotlinPluginVersion, registry) {
) : AbstractKotlinPlugin(KotlinTasksProvider(), registry) {
companion object {
private const val targetName = "common"
@@ -642,10 +635,9 @@ internal open class KotlinCommonPlugin(
override fun buildSourceSetProcessor(
project: Project,
compilation: AbstractKotlinCompilation<*>,
kotlinPluginVersion: String
compilation: AbstractKotlinCompilation<*>
): KotlinSourceSetProcessor<*> =
KotlinCommonSourceSetProcessor(compilation, tasksProvider, kotlinPluginVersion)
KotlinCommonSourceSetProcessor(compilation, tasksProvider)
override fun apply(project: Project) {
val target = KotlinWithJavaTarget<KotlinMultiplatformCommonOptions>(
@@ -661,9 +653,8 @@ internal open class KotlinCommonPlugin(
}
internal open class Kotlin2JsPlugin(
kotlinPluginVersion: String,
registry: ToolingModelBuilderRegistry
) : AbstractKotlinPlugin(KotlinTasksProvider(), kotlinPluginVersion, registry) {
) : AbstractKotlinPlugin(KotlinTasksProvider(), registry) {
companion object {
private const val targetName = "2Js"
@@ -672,12 +663,9 @@ internal open class Kotlin2JsPlugin(
override fun buildSourceSetProcessor(
project: Project,
compilation: AbstractKotlinCompilation<*>,
kotlinPluginVersion: String
compilation: AbstractKotlinCompilation<*>
): KotlinSourceSetProcessor<*> =
Kotlin2JsSourceSetProcessor(
tasksProvider, compilation, kotlinPluginVersion
)
Kotlin2JsSourceSetProcessor(tasksProvider, compilation)
override fun apply(project: Project) {
if (!PropertiesProvider(project).noWarn2JsPlugin) {
@@ -691,7 +679,6 @@ internal open class Kotlin2JsPlugin(
}
internal open class KotlinAndroidPlugin(
private val kotlinPluginVersion: String,
private val registry: ToolingModelBuilderRegistry
) : Plugin<Project> {
@@ -701,20 +688,19 @@ internal open class KotlinAndroidPlugin(
val androidTarget = KotlinAndroidTarget("", project)
(project.kotlinExtension as KotlinAndroidProjectExtension).target = androidTarget
applyToTarget(kotlinPluginVersion, androidTarget)
applyToTarget(androidTarget)
applyUserDefinedAttributes(androidTarget)
customizeKotlinDependencies(project)
registry.register(KotlinModelBuilder(kotlinPluginVersion, androidTarget))
registry.register(KotlinModelBuilder(project.getKotlinPluginVersion(), androidTarget))
project.whenEvaluated { project.components.addAll(androidTarget.components) }
}
companion object {
fun androidTargetHandler(
kotlinPluginVersion: String,
androidTarget: KotlinAndroidTarget
): AbstractAndroidProjectHandler {
val tasksProvider = AndroidTasksProvider()
@@ -727,25 +713,22 @@ internal open class KotlinAndroidPlugin(
}
val kotlinTools = KotlinConfigurationTools(
tasksProvider,
kotlinPluginVersion
tasksProvider
)
return Android25ProjectHandler(kotlinTools)
}
fun applyToTarget(
kotlinPluginVersion: String,
kotlinTarget: KotlinAndroidTarget
) {
androidTargetHandler(kotlinPluginVersion, kotlinTarget).configureTarget(kotlinTarget)
androidTargetHandler(kotlinTarget).configureTarget(kotlinTarget)
}
}
}
class KotlinConfigurationTools internal constructor(
val kotlinTasksProvider: KotlinTasksProvider,
val kotlinPluginVersion: String
val kotlinTasksProvider: KotlinTasksProvider
)
abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTools: KotlinConfigurationTools) {
@@ -827,7 +810,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationTool
val compilation = kotlinAndroidTarget.compilations.getByName(getVariantName(variant))
postprocessVariant(variant, compilation, project, ext, plugin)
val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinConfigurationTools.kotlinPluginVersion)
val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project)
subpluginEnvironment.addSubpluginOptions(project, compilation)
}
checkAndroidAnnotationProcessorDependencyUsage(project)
@@ -53,7 +53,6 @@ import kotlin.reflect.KClass
abstract class KotlinBasePluginWrapper : Plugin<Project> {
private val log = Logging.getLogger(this.javaClass)
val kotlinPluginVersion = loadKotlinVersionFromResource(log)
open val projectExtensionClass: KClass<out KotlinTopLevelExtension> get() = KotlinProjectExtension::class
@@ -61,6 +60,8 @@ abstract class KotlinBasePluginWrapper : Plugin<Project> {
DefaultKotlinSourceSetFactory(project)
override fun apply(project: Project) {
val kotlinPluginVersion = project.getKotlinPluginVersion()
val listenerRegistryHolder = BuildEventsListenerRegistryHolder.getInstance(project)
val statisticsReporter = KotlinBuildStatsService.getOrCreateInstance(project, listenerRegistryHolder)
statisticsReporter?.report(StringMetrics.KOTLIN_COMPILER_VERSION, kotlinPluginVersion)
@@ -116,7 +117,7 @@ abstract class KotlinBasePluginWrapper : Plugin<Project> {
.maybeCreate(COMPILER_CLASSPATH_CONFIGURATION_NAME)
.defaultDependencies {
it.add(
project.dependencies.create("$KOTLIN_MODULE_GROUP:$KOTLIN_COMPILER_EMBEDDABLE:$kotlinPluginVersion")
project.dependencies.create("$KOTLIN_MODULE_GROUP:$KOTLIN_COMPILER_EMBEDDABLE:${project.getKotlinPluginVersion()}")
)
}
project
@@ -151,7 +152,7 @@ open class KotlinPluginWrapper @Inject constructor(
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinPlugin(kotlinPluginVersion, registry)
KotlinPlugin(registry)
override val projectExtensionClass: KClass<out KotlinJvmProjectExtension>
get() = KotlinJvmProjectExtension::class
@@ -161,7 +162,7 @@ open class KotlinCommonPluginWrapper @Inject constructor(
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinCommonPlugin(kotlinPluginVersion, registry)
KotlinCommonPlugin(registry)
override val projectExtensionClass: KClass<out KotlinCommonProjectExtension>
get() = KotlinCommonProjectExtension::class
@@ -171,7 +172,7 @@ open class KotlinAndroidPluginWrapper @Inject constructor(
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinAndroidPlugin(kotlinPluginVersion, registry)
KotlinAndroidPlugin(registry)
override val projectExtensionClass: KClass<out KotlinAndroidProjectExtension>
get() = KotlinAndroidProjectExtension::class
@@ -181,7 +182,7 @@ open class Kotlin2JsPluginWrapper @Inject constructor(
protected val registry: ToolingModelBuilderRegistry
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
Kotlin2JsPlugin(kotlinPluginVersion, registry)
Kotlin2JsPlugin(registry)
override val projectExtensionClass: KClass<out Kotlin2JsProjectExtension>
get() = Kotlin2JsProjectExtension::class
@@ -190,7 +191,7 @@ open class Kotlin2JsPluginWrapper @Inject constructor(
open class KotlinJsPluginWrapper @Inject constructor(
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinJsPlugin(kotlinPluginVersion)
KotlinJsPlugin(project.getKotlinPluginVersion())
override val projectExtensionClass: KClass<out KotlinJsProjectExtension>
get() = KotlinJsProjectExtension::class
@@ -222,7 +223,7 @@ open class KotlinJsPluginWrapper @Inject constructor(
open class KotlinMultiplatformPluginWrapper @Inject constructor(
) : KotlinBasePluginWrapper() {
override fun getPlugin(project: Project, kotlinGradleBuildServices: KotlinGradleBuildServices): Plugin<Project> =
KotlinMultiplatformPlugin(kotlinPluginVersion)
KotlinMultiplatformPlugin()
override val projectExtensionClass: KClass<out KotlinMultiplatformExtension>
get() = KotlinMultiplatformExtension::class
@@ -251,12 +252,17 @@ open class KotlinPm20PluginWrapper @Inject constructor(private val objectFactory
get() = KotlinPm20ProjectExtension::class
}
fun Project.getKotlinPluginVersion(): String? =
plugins.asSequence().mapNotNull { (it as? KotlinBasePluginWrapper)?.kotlinPluginVersion }.firstOrNull()
fun Plugin<*>.loadKotlinVersionFromResource(log: Logger): String {
log.kotlinDebug("Loading version information")
val projectVersion = loadPropertyFromResources("project.properties", "project.version")
log.kotlinDebug("Found project version [$projectVersion]")
return projectVersion
fun Project.getKotlinPluginVersion(): String {
if (!kotlinPluginVersionFromResources.isInitialized()) {
project.logger.kotlinDebug("Loading version information")
project.logger.kotlinDebug("Found project version [${kotlinPluginVersionFromResources.value}")
}
return kotlinPluginVersionFromResources.value
}
private fun loadKotlinPluginVersionFromResourcesOf(any: Any) =
any.loadPropertyFromResources("project.properties", "project.version")
private val kotlinPluginVersionFromResources = lazy {
loadKotlinPluginVersionFromResourcesOf(object {})
}
@@ -370,8 +370,7 @@ internal val KotlinTarget.testTaskName: String
abstract class KotlinOnlyTargetConfigurator<KotlinCompilationType : KotlinCompilation<*>, KotlinTargetType : KotlinOnlyTarget<KotlinCompilationType>>(
createDefaultSourceSets: Boolean,
createTestCompilation: Boolean,
val kotlinPluginVersion: String
createTestCompilation: Boolean
) : AbstractKotlinTargetConfigurator<KotlinTargetType>(
createDefaultSourceSets,
createTestCompilation
@@ -20,8 +20,9 @@ class SubpluginEnvironment(
private val kotlinPluginVersion: String
) {
companion object {
fun loadSubplugins(project: Project, kotlinPluginVersion: String): SubpluginEnvironment =
try {
fun loadSubplugins(project: Project): SubpluginEnvironment {
val kotlinPluginVersion = project.getKotlinPluginVersion()
return try {
@Suppress("DEPRECATION") // support for the deprecated plugin API
val klass = KotlinGradleSubplugin::class.java
val buildscriptClassloader = project.buildscript.classLoader
@@ -51,6 +52,7 @@ class SubpluginEnvironment(
project.logger.error("Could not load subplugins", e)
SubpluginEnvironment(listOf(), kotlinPluginVersion)
}
}
}
fun addSubpluginOptions(
@@ -136,7 +138,6 @@ internal class LegacyKotlinCompilerPluginSupportPlugin(
val androidProjectHandlerOrNull: AbstractAndroidProjectHandler? = if (kotlinCompilation is KotlinJvmAndroidCompilation)
KotlinAndroidPlugin.androidTargetHandler(
checkNotNull(project.getKotlinPluginVersion()),
kotlinCompilation.target as KotlinAndroidTarget
) else null
@@ -44,9 +44,7 @@ import org.jetbrains.kotlin.konan.target.KonanTarget.*
import org.jetbrains.kotlin.konan.target.presetName
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
class KotlinMultiplatformPlugin(
private val kotlinPluginVersion: String
) : Plugin<Project> {
class KotlinMultiplatformPlugin : Plugin<Project> {
private class TargetFromPresetExtension(val targetsContainer: KotlinTargetsContainerWithPresets) {
fun <T : KotlinTarget> fromPreset(preset: KotlinTargetPreset<T>, name: String, configureClosure: Closure<*>): T =
@@ -93,7 +91,7 @@ class KotlinMultiplatformPlugin(
// set up metadata publishing
targetsFromPreset.fromPreset(
KotlinMetadataTargetPreset(project, kotlinPluginVersion),
KotlinMetadataTargetPreset(project),
METADATA_TARGET_NAME
)
configurePublishingWithMavenPublish(project)
@@ -176,20 +174,17 @@ class KotlinMultiplatformPlugin(
fun setupDefaultPresets(project: Project) {
with(project.multiplatformExtension.presets) {
add(KotlinJvmTargetPreset(project, kotlinPluginVersion))
add(KotlinJsTargetPreset(project, kotlinPluginVersion).apply { irPreset = null })
add(KotlinJsIrTargetPreset(project, kotlinPluginVersion).apply { mixedMode = false })
add(KotlinJvmTargetPreset(project))
add(KotlinJsTargetPreset(project).apply { irPreset = null })
add(KotlinJsIrTargetPreset(project).apply { mixedMode = false })
add(
KotlinJsTargetPreset(
project,
kotlinPluginVersion
).apply {
irPreset = KotlinJsIrTargetPreset(project, kotlinPluginVersion)
KotlinJsTargetPreset(project).apply {
irPreset = KotlinJsIrTargetPreset(project)
.apply { mixedMode = true }
}
)
add(KotlinAndroidTargetPreset(project, kotlinPluginVersion))
add(KotlinJvmWithJavaTargetPreset(project, kotlinPluginVersion))
add(KotlinAndroidTargetPreset(project))
add(KotlinJvmWithJavaTargetPreset(project))
// Note: modifying these sets should also be reflected in the DSL code generator, see 'presetEntries.kt'
val nativeTargetsWithHostTests = setOf(LINUX_X64, MACOS_X64, MINGW_X64)
@@ -199,10 +194,10 @@ class KotlinMultiplatformPlugin(
.forEach { (_, konanTarget) ->
val targetToAdd = when (konanTarget) {
in nativeTargetsWithHostTests ->
KotlinNativeTargetWithHostTestsPreset(konanTarget.presetName, project, konanTarget, kotlinPluginVersion)
KotlinNativeTargetWithHostTestsPreset(konanTarget.presetName, project, konanTarget)
in nativeTargetsWithSimulatorTests ->
KotlinNativeTargetWithSimulatorTestsPreset(konanTarget.presetName, project, konanTarget, kotlinPluginVersion)
else -> KotlinNativeTargetPreset(konanTarget.presetName, project, konanTarget, kotlinPluginVersion)
KotlinNativeTargetWithSimulatorTestsPreset(konanTarget.presetName, project, konanTarget)
else -> KotlinNativeTargetPreset(konanTarget.presetName, project, konanTarget)
}
add(targetToAdd)
@@ -12,8 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
abstract class KotlinOnlyTargetPreset<R : KotlinOnlyTarget<T>, T : KotlinCompilation<*>>(
protected val project: Project,
protected val kotlinPluginVersion: String
protected val project: Project
) : KotlinTargetPreset<R> {
protected abstract fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<T, R>
@@ -72,7 +72,7 @@ open class KotlinAndroidTarget(
}
val variantNames =
KotlinAndroidPlugin.androidTargetHandler(project.getKotlinPluginVersion()!!, this)
KotlinAndroidPlugin.androidTargetHandler(this)
.getLibraryVariantNames()
val missingVariants =
@@ -90,7 +90,7 @@ open class KotlinAndroidTarget(
override val kotlinComponents by lazy {
checkPublishLibraryVariantsExist()
KotlinAndroidPlugin.androidTargetHandler(project.getKotlinPluginVersion()!!, this).doCreateComponents()
KotlinAndroidPlugin.androidTargetHandler(this).doCreateComponents()
}
private fun isVariantPublished(variant: BaseVariant): Boolean {
@@ -11,8 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinAndroidPlugin
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetPreset
class KotlinAndroidTargetPreset(
private val project: Project,
private val kotlinPluginVersion: String
private val project: Project
) : KotlinTargetPreset<KotlinAndroidTarget> {
override fun getName(): String = PRESET_NAME
@@ -23,7 +22,7 @@ class KotlinAndroidTargetPreset(
preset = this@KotlinAndroidTargetPreset
}
KotlinAndroidPlugin.applyToTarget(kotlinPluginVersion, result)
KotlinAndroidPlugin.applyToTarget(result)
return result
}
@@ -42,8 +42,8 @@ open class KotlinJsPlugin(
customizeKotlinDependencies(project)
kotlinExtension.apply {
irPreset = KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion)
legacyPreset = KotlinJsSingleTargetPreset(project, kotlinPluginVersion)
irPreset = KotlinJsIrSingleTargetPreset(project)
legacyPreset = KotlinJsSingleTargetPreset(project)
defaultJsCompilerType = PropertiesProvider(project).jsCompiler
}
@@ -20,8 +20,8 @@ import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
import org.jetbrains.kotlin.gradle.testing.testTaskName
import java.util.concurrent.Callable
open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
KotlinOnlyTargetConfigurator<KotlinJsCompilation, KotlinJsTarget>(true, true, kotlinPluginVersion),
open class KotlinJsTargetConfigurator :
KotlinOnlyTargetConfigurator<KotlinJsCompilation, KotlinJsTarget>(true, true),
KotlinTargetWithTestsConfigurator<KotlinJsReportAggregatingTestRun, KotlinJsTarget> {
override val testRunClass: Class<KotlinJsReportAggregatingTestRun> get() = KotlinJsReportAggregatingTestRun::class.java
@@ -51,7 +51,7 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) :
override fun buildCompilationProcessor(compilation: KotlinJsCompilation): KotlinSourceSetProcessor<*> {
val tasksProvider = KotlinTasksProvider()
return Kotlin2JsSourceSetProcessor(tasksProvider, compilation, kotlinPluginVersion)
return Kotlin2JsSourceSetProcessor(tasksProvider, compilation)
}
override fun configureCompilationDefaults(target: KotlinJsTarget) {
@@ -18,11 +18,9 @@ import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
import org.jetbrains.kotlin.statistics.metrics.StringMetrics
open class KotlinJsTargetPreset(
project: Project,
kotlinPluginVersion: String
project: Project
) : KotlinOnlyTargetPreset<KotlinJsTarget, KotlinJsCompilation>(
project,
kotlinPluginVersion
project
) {
var irPreset: KotlinJsIrTargetPreset? = null
internal set
@@ -84,9 +82,7 @@ open class KotlinJsTargetPreset(
}
}
override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator(
kotlinPluginVersion
)
override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator()
override fun getName(): String {
return lowerCamelCaseName(
@@ -105,11 +101,9 @@ open class KotlinJsTargetPreset(
}
class KotlinJsSingleTargetPreset(
project: Project,
kotlinPluginVersion: String
project: Project
) : KotlinJsTargetPreset(
project,
kotlinPluginVersion
project
) {
override val isMpp: Boolean
get() = false
@@ -125,7 +119,5 @@ class KotlinJsSingleTargetPreset(
?.decapitalize()
}
override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator(
kotlinPluginVersion
)
override fun createKotlinTargetConfigurator() = KotlinJsTargetConfigurator()
}
@@ -21,8 +21,8 @@ import org.jetbrains.kotlin.gradle.utils.isParentOf
import org.jetbrains.kotlin.gradle.utils.klibModuleName
import java.io.File
open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) :
KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget>(true, true, kotlinPluginVersion),
open class KotlinJsIrTargetConfigurator() :
KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget>(true, true),
KotlinTargetWithTestsConfigurator<KotlinJsReportAggregatingTestRun, KotlinJsIrTarget> {
override val testRunClass: Class<KotlinJsReportAggregatingTestRun> get() = KotlinJsReportAggregatingTestRun::class.java
@@ -55,7 +55,7 @@ open class KotlinJsIrTargetConfigurator(kotlinPluginVersion: String) :
override fun buildCompilationProcessor(compilation: KotlinJsIrCompilation): KotlinSourceSetProcessor<*> {
val tasksProvider = KotlinTasksProvider()
return KotlinJsIrSourceSetProcessor(tasksProvider, compilation, kotlinPluginVersion)
return KotlinJsIrSourceSetProcessor(tasksProvider, compilation)
}
override fun createArchiveTasks(target: KotlinJsIrTarget): TaskProvider<out Zip> {
@@ -13,11 +13,9 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTargetPreset
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
open class KotlinJsIrTargetPreset(
project: Project,
kotlinPluginVersion: String
project: Project
) : KotlinOnlyTargetPreset<KotlinJsIrTarget, KotlinJsIrCompilation>(
project,
kotlinPluginVersion
project
) {
internal var mixedMode: Boolean? = null
@@ -53,7 +51,7 @@ open class KotlinJsIrTargetPreset(
}
override fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget> =
KotlinJsIrTargetConfigurator(kotlinPluginVersion)
KotlinJsIrTargetConfigurator()
override fun getName(): String = PRESET_NAME
@@ -72,11 +70,9 @@ open class KotlinJsIrTargetPreset(
}
class KotlinJsIrSingleTargetPreset(
project: Project,
kotlinPluginVersion: String
project: Project
) : KotlinJsIrTargetPreset(
project,
kotlinPluginVersion
project
) {
override val isMpp: Boolean
get() = false
@@ -93,5 +89,5 @@ class KotlinJsIrSingleTargetPreset(
}
override fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<KotlinJsIrCompilation, KotlinJsIrTarget> =
KotlinJsIrTargetConfigurator(kotlinPluginVersion)
KotlinJsIrTargetConfigurator()
}
@@ -19,8 +19,8 @@ import org.jetbrains.kotlin.gradle.tasks.registerTask
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
import org.jetbrains.kotlin.gradle.testing.testTaskName
class KotlinJvmTargetConfigurator(kotlinPluginVersion: String) :
KotlinOnlyTargetConfigurator<KotlinJvmCompilation, KotlinJvmTarget>(true, true, kotlinPluginVersion),
class KotlinJvmTargetConfigurator :
KotlinOnlyTargetConfigurator<KotlinJvmCompilation, KotlinJvmTarget>(true, true),
KotlinTargetWithTestsConfigurator<KotlinJvmTestRun, KotlinJvmTarget> {
override fun configurePlatformSpecificModel(target: KotlinJvmTarget) {
@@ -74,6 +74,6 @@ class KotlinJvmTargetConfigurator(kotlinPluginVersion: String) :
override fun buildCompilationProcessor(compilation: KotlinJvmCompilation): KotlinSourceSetProcessor<*> {
val tasksProvider = KotlinTasksProvider()
return Kotlin2JvmSourceSetProcessor(tasksProvider, compilation, kotlinPluginVersion)
return Kotlin2JvmSourceSetProcessor(tasksProvider, compilation)
}
}
@@ -12,11 +12,9 @@ import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTargetConfigurator
class KotlinJvmTargetPreset(
project: Project,
kotlinPluginVersion: String
project: Project
) : KotlinOnlyTargetPreset<KotlinJvmTarget, KotlinJvmCompilation>(
project,
kotlinPluginVersion
project
) {
override fun instantiateTarget(name: String): KotlinJvmTarget {
return project.objects.newInstance(KotlinJvmTarget::class.java, project)
@@ -27,7 +25,7 @@ class KotlinJvmTargetPreset(
override fun createCompilationFactory(forTarget: KotlinJvmTarget): KotlinCompilationFactory<KotlinJvmCompilation> =
KotlinJvmCompilationFactory(forTarget)
override fun createKotlinTargetConfigurator() = KotlinJvmTargetConfigurator(kotlinPluginVersion)
override fun createKotlinTargetConfigurator() = KotlinJvmTargetConfigurator()
override val platformType: KotlinPlatformType
get() = KotlinPlatformType.jvm
@@ -16,8 +16,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider
import org.jetbrains.kotlin.gradle.utils.SingleWarningPerBuild
class KotlinJvmWithJavaTargetPreset(
private val project: Project,
private val kotlinPluginVersion: String
private val project: Project
) : KotlinTargetPreset<KotlinWithJavaTarget<KotlinJvmOptions>> {
override fun getName(): String = PRESET_NAME
@@ -36,7 +35,7 @@ class KotlinJvmWithJavaTargetPreset(
}
AbstractKotlinPlugin.configureTarget(target) { compilation ->
Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilation, kotlinPluginVersion)
Kotlin2JvmSourceSetProcessor(KotlinTasksProvider(), compilation)
}
target.compilations.getByName("test").run {
@@ -47,11 +47,10 @@ internal val Project.isKotlinGranularMetadataEnabled: Boolean
internal val Project.isCompatibilityMetadataVariantEnabled: Boolean
get() = PropertiesProvider(this).enableCompatibilityMetadataVariant == true
class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
class KotlinMetadataTargetConfigurator :
KotlinOnlyTargetConfigurator<AbstractKotlinCompilation<*>, KotlinMetadataTarget>(
createDefaultSourceSets = false,
createTestCompilation = false,
kotlinPluginVersion = kotlinPluginVersion
createTestCompilation = false
) {
companion object {
internal const val ALL_METADATA_JAR_NAME = "allMetadataJar"
@@ -115,7 +114,7 @@ class KotlinMetadataTargetConfigurator(kotlinPluginVersion: String) :
override fun buildCompilationProcessor(compilation: AbstractKotlinCompilation<*>): KotlinCompilationProcessor<*> = when (compilation) {
is KotlinCommonCompilation -> {
val tasksProvider = KotlinTasksProvider()
KotlinCommonSourceSetProcessor(compilation, tasksProvider, kotlinPluginVersion)
KotlinCommonSourceSetProcessor(compilation, tasksProvider)
}
is KotlinSharedNativeCompilation -> NativeSharedCompilationProcessor(compilation)
else -> error("unsupported compilation type ${compilation::class.qualifiedName}")
@@ -478,13 +477,8 @@ internal class NativeSharedCompilationProcessor(
override val kotlinCompilation: KotlinNativeFragmentMetadataCompilationData
) : KotlinCompilationProcessor<KotlinNativeCompile>(kotlinCompilation) {
private val nativeTargetConfigurator =
KotlinNativeTargetConfigurator<KotlinNativeTarget>(kotlinCompilation.project.getKotlinPluginVersion() ?: "" /*FIXME*/)
override val kotlinTask: TaskProvider<out KotlinNativeCompile> =
with(nativeTargetConfigurator) {
KotlinNativeTargetConfigurator.createKlibCompilationTask(kotlinCompilation)
}
KotlinNativeTargetConfigurator.createKlibCompilationTask(kotlinCompilation)
override fun run() = Unit
}
@@ -13,12 +13,8 @@ import org.jetbrains.kotlin.gradle.plugin.sources.applyLanguageSettingsToKotlinO
import org.jetbrains.kotlin.gradle.targets.metadata.KotlinMetadataTargetConfigurator
class KotlinMetadataTargetPreset(
project: Project,
kotlinPluginVersion: String
) : KotlinOnlyTargetPreset<KotlinMetadataTarget, AbstractKotlinCompilation<*>>(
project,
kotlinPluginVersion
) {
project: Project
) : KotlinOnlyTargetPreset<KotlinMetadataTarget, AbstractKotlinCompilation<*>>(project) {
override fun getName(): String = PRESET_NAME
override fun createCompilationFactory(
@@ -42,7 +38,7 @@ class KotlinMetadataTargetPreset(
}
override fun createKotlinTargetConfigurator(): KotlinOnlyTargetConfigurator<AbstractKotlinCompilation<*>, KotlinMetadataTarget> =
KotlinMetadataTargetConfigurator(kotlinPluginVersion)
KotlinMetadataTargetConfigurator()
override fun instantiateTarget(name: String): KotlinMetadataTarget {
return project.objects.newInstance(KotlinMetadataTarget::class.java, project)
@@ -46,9 +46,7 @@ import org.jetbrains.kotlin.konan.target.HostManager
import org.jetbrains.kotlin.konan.target.KonanTarget
import java.io.File
open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
private val kotlinPluginVersion: String
) : AbstractKotlinTargetConfigurator<T>(
open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget> : AbstractKotlinTargetConfigurator<T>(
createDefaultSourceSets = true,
createTestCompilation = true
) {
@@ -501,7 +499,7 @@ open class KotlinNativeTargetConfigurator<T : KotlinNativeTarget>(
project.whenEvaluated {
SubpluginEnvironment
.loadSubplugins(project, project.getKotlinPluginVersion() ?: "unspecified" /* TODO */)
.loadSubplugins(project)
.addSubpluginOptions(project, compilation)
compilation.compileKotlinTaskProvider.configure {
@@ -573,8 +571,7 @@ abstract class KotlinNativeTargetWithTestsConfigurator<
TargetType : KotlinNativeTargetWithTests<TestRunType>,
TestRunType : KotlinNativeBinaryTestRun,
TaskType : KotlinNativeTest>(
kotlinPluginVersion: String
) : KotlinNativeTargetConfigurator<TargetType>(kotlinPluginVersion),
) : KotlinNativeTargetConfigurator<TargetType>(),
KotlinTargetWithTestsConfigurator<TestRunType, TargetType> {
abstract val testTaskClass: Class<TaskType>
@@ -610,13 +607,11 @@ abstract class KotlinNativeTargetWithTestsConfigurator<
}
}
class KotlinNativeTargetWithHostTestsConfigurator(kotlinPluginVersion: String) :
class KotlinNativeTargetWithHostTestsConfigurator() :
KotlinNativeTargetWithTestsConfigurator<
KotlinNativeTargetWithHostTests,
KotlinNativeHostTestRun,
KotlinNativeHostTest>(
kotlinPluginVersion
) {
KotlinNativeHostTest>() {
override val testTaskClass: Class<KotlinNativeHostTest>
get() = KotlinNativeHostTest::class.java
@@ -634,13 +629,11 @@ class KotlinNativeTargetWithHostTestsConfigurator(kotlinPluginVersion: String) :
DefaultHostTestRun(name, target).apply { configureTestRun(target, this) }
}
class KotlinNativeTargetWithSimulatorTestsConfigurator(kotlinPluginVersion: String) :
class KotlinNativeTargetWithSimulatorTestsConfigurator :
KotlinNativeTargetWithTestsConfigurator<
KotlinNativeTargetWithSimulatorTests,
KotlinNativeSimulatorTestRun,
KotlinNativeSimulatorTest>(
kotlinPluginVersion
) {
KotlinNativeSimulatorTest>() {
override val testTaskClass: Class<KotlinNativeSimulatorTest>
get() = KotlinNativeSimulatorTest::class.java
@@ -26,8 +26,7 @@ import org.jetbrains.kotlin.konan.target.KonanTarget
abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
private val name: String,
val project: Project,
val konanTarget: KonanTarget,
protected val kotlinPluginVersion: String
val konanTarget: KonanTarget
) : KotlinTargetPreset<T> {
init {
@@ -108,32 +107,32 @@ abstract class AbstractKotlinNativeTargetPreset<T : KotlinNativeTarget>(
}
open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget, kotlinPluginVersion: String) :
AbstractKotlinNativeTargetPreset<KotlinNativeTarget>(name, project, konanTarget, kotlinPluginVersion) {
open class KotlinNativeTargetPreset(name: String, project: Project, konanTarget: KonanTarget) :
AbstractKotlinNativeTargetPreset<KotlinNativeTarget>(name, project, konanTarget) {
override fun createTargetConfigurator(): KotlinTargetConfigurator<KotlinNativeTarget> =
KotlinNativeTargetConfigurator(kotlinPluginVersion)
KotlinNativeTargetConfigurator()
override fun instantiateTarget(name: String): KotlinNativeTarget {
return project.objects.newInstance(KotlinNativeTarget::class.java, project, konanTarget)
}
}
open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, konanTarget: KonanTarget, kotlinPluginVersion: String) :
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithHostTests>(name, project, konanTarget, kotlinPluginVersion) {
open class KotlinNativeTargetWithHostTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithHostTests>(name, project, konanTarget) {
override fun createTargetConfigurator(): KotlinNativeTargetWithHostTestsConfigurator =
KotlinNativeTargetWithHostTestsConfigurator(kotlinPluginVersion)
KotlinNativeTargetWithHostTestsConfigurator()
override fun instantiateTarget(name: String): KotlinNativeTargetWithHostTests =
project.objects.newInstance(KotlinNativeTargetWithHostTests::class.java, project, konanTarget)
}
open class KotlinNativeTargetWithSimulatorTestsPreset(name: String, project: Project, konanTarget: KonanTarget, kotlinPluginVersion: String) :
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithSimulatorTests>(name, project, konanTarget, kotlinPluginVersion) {
open class KotlinNativeTargetWithSimulatorTestsPreset(name: String, project: Project, konanTarget: KonanTarget) :
AbstractKotlinNativeTargetPreset<KotlinNativeTargetWithSimulatorTests>(name, project, konanTarget) {
override fun createTargetConfigurator(): KotlinNativeTargetWithSimulatorTestsConfigurator =
KotlinNativeTargetWithSimulatorTestsConfigurator(kotlinPluginVersion)
KotlinNativeTargetWithSimulatorTestsConfigurator()
override fun instantiateTarget(name: String): KotlinNativeTargetWithSimulatorTests =
project.objects.newInstance(KotlinNativeTargetWithSimulatorTests::class.java, project, konanTarget)
@@ -23,6 +23,7 @@ import org.gradle.api.artifacts.ResolvedDependency
import org.gradle.api.initialization.dsl.ScriptHandler
import org.jetbrains.kotlin.gradle.plugin.KotlinBasePluginWrapper
import org.jetbrains.kotlin.gradle.plugin.KotlinPlugin
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import java.io.File
import java.net.URLClassLoader
import java.net.URLDecoder
@@ -130,7 +131,7 @@ internal fun findJarByClass(klass: Class<*>): File? {
}
private fun findKotlinModuleJar(project: Project, expectedClassName: String, moduleId: String): List<File> {
val pluginVersion = pluginVersionFromAppliedPlugin(project)
val pluginVersion = project.getKotlinPluginVersion()
val filesToCheck = sequenceOf(pluginVersion?.let { version -> getModuleFromClassLoader(moduleId, version) }) +
Sequence { findPotentialModuleJars(project, moduleId).iterator() } //call the body only when queried
@@ -138,9 +139,6 @@ private fun findKotlinModuleJar(project: Project, expectedClassName: String, mod
return filesToCheck.filterNotNull().firstOrNull { it.hasEntry(entryToFind) }?.let { listOf(it) } ?: emptyList()
}
private fun pluginVersionFromAppliedPlugin(project: Project): String? =
project.plugins.filterIsInstance<KotlinBasePluginWrapper>().firstOrNull()?.kotlinPluginVersion
private fun getModuleFromClassLoader(moduleId: String, moduleVersion: String): File? {
val urlClassLoader = KotlinPlugin::class.java.classLoader as? URLClassLoader ?: return null
return urlClassLoader.urLs