[Gradle] Implement KotlinJs*Compilation with underlying KotlinCompilationImpl
KT-54312
This commit is contained in:
committed by
Space Team
parent
0729d7519c
commit
0069457b94
+2
-2
@@ -40,7 +40,7 @@ internal open class JsCompilationDetails(
|
|||||||
|
|
||||||
internal abstract class JsCompilationDependenciesHolder @Inject constructor(
|
internal abstract class JsCompilationDependenciesHolder @Inject constructor(
|
||||||
val target: KotlinTarget,
|
val target: KotlinTarget,
|
||||||
val compilationPurpose: String
|
val compilationName: String
|
||||||
) : HasKotlinDependencies {
|
) : HasKotlinDependencies {
|
||||||
override val apiConfigurationName: String
|
override val apiConfigurationName: String
|
||||||
get() = disambiguateNameInPlatform(API)
|
get() = disambiguateNameInPlatform(API)
|
||||||
@@ -64,7 +64,7 @@ internal open class JsCompilationDetails(
|
|||||||
private fun disambiguateNameInPlatform(simpleName: String): String {
|
private fun disambiguateNameInPlatform(simpleName: String): String {
|
||||||
return lowerCamelCaseName(
|
return lowerCamelCaseName(
|
||||||
disambiguationClassifierInPlatform,
|
disambiguationClassifierInPlatform,
|
||||||
compilationPurpose.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME },
|
compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME },
|
||||||
"compilation",
|
"compilation",
|
||||||
simpleName
|
simpleName
|
||||||
)
|
)
|
||||||
|
|||||||
+41
-27
@@ -23,35 +23,9 @@ internal interface KotlinCompilationSourceSetInclusion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
internal class DefaultKotlinCompilationSourceSetInclusion(
|
internal class DefaultKotlinCompilationSourceSetInclusion(
|
||||||
private val addSourcesToCompileTask: AddSourcesToCompileTask = AddSourcesToCompileTask.Default
|
private val addSourcesToCompileTask: AddSourcesToCompileTask = DefaultAddSourcesToCompileTask
|
||||||
) : KotlinCompilationSourceSetInclusion {
|
) : KotlinCompilationSourceSetInclusion {
|
||||||
|
|
||||||
interface AddSourcesToCompileTask {
|
|
||||||
fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>)
|
|
||||||
|
|
||||||
object Default : AddSourcesToCompileTask {
|
|
||||||
override fun addSources(
|
|
||||||
compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>
|
|
||||||
) {
|
|
||||||
addSourcesToKotlinCompileTask(
|
|
||||||
compilation.project,
|
|
||||||
compilation.compileKotlinTaskName,
|
|
||||||
sourceSet.customSourceFilesExtensions,
|
|
||||||
addAsCommonSources,
|
|
||||||
{ sourceSet.kotlin }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
object Native : AddSourcesToCompileTask {
|
|
||||||
override fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {
|
|
||||||
addSourcesToKotlinNativeCompileTask(
|
|
||||||
compilation.project, compilation.compileKotlinTaskName, { sourceSet.kotlin }, addAsCommonSources
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun include(compilation: InternalKotlinCompilation<*>, sourceSet: KotlinSourceSet) {
|
override fun include(compilation: InternalKotlinCompilation<*>, sourceSet: KotlinSourceSet) {
|
||||||
/* Check if the source set was already included */
|
/* Check if the source set was already included */
|
||||||
if (!compilation.includedSourceSets.add(sourceSet)) return
|
if (!compilation.includedSourceSets.add(sourceSet)) return
|
||||||
@@ -110,4 +84,44 @@ internal class DefaultKotlinCompilationSourceSetInclusion(
|
|||||||
val InternalKotlinCompilation<*>.includedSourceSets: MutableSet<KotlinSourceSet>
|
val InternalKotlinCompilation<*>.includedSourceSets: MutableSet<KotlinSourceSet>
|
||||||
get() = extras.getOrPut(includedSourceSetsKey, { hashSetOf() })
|
get() = extras.getOrPut(includedSourceSetsKey, { hashSetOf() })
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
fun interface AddSourcesToCompileTask {
|
||||||
|
fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>)
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun composite(vararg elements: AddSourcesToCompileTask?): AddSourcesToCompileTask =
|
||||||
|
CompositeAddSourcesToCompileTask(listOfNotNull(*elements))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class CompositeAddSourcesToCompileTask(private val children: List<AddSourcesToCompileTask>) : AddSourcesToCompileTask {
|
||||||
|
override fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) {
|
||||||
|
return children.forEach { child -> child.addSources(compilation, sourceSet, addAsCommonSources) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object NativeAddSourcesToCompileTask : AddSourcesToCompileTask {
|
||||||
|
override fun addSources(compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>) =
|
||||||
|
addSourcesToKotlinNativeCompileTask(
|
||||||
|
project = compilation.project,
|
||||||
|
taskName = compilation.compileKotlinTaskName,
|
||||||
|
sourceFiles = { sourceSet.kotlin },
|
||||||
|
addAsCommonSources = addAsCommonSources
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
object DefaultAddSourcesToCompileTask : AddSourcesToCompileTask {
|
||||||
|
override fun addSources(
|
||||||
|
compilation: KotlinCompilation<*>, sourceSet: KotlinSourceSet, addAsCommonSources: Lazy<Boolean>
|
||||||
|
) = addSourcesToKotlinCompileTask(
|
||||||
|
project = compilation.project,
|
||||||
|
taskName = compilation.compileKotlinTaskName,
|
||||||
|
sourceFileExtensions = sourceSet.customSourceFilesExtensions,
|
||||||
|
addAsCommonSources = addAsCommonSources,
|
||||||
|
sources = { sourceSet.kotlin }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+41
-28
@@ -11,6 +11,8 @@ import org.jetbrains.kotlin.gradle.plugin.*
|
|||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationDependencyConfigurationsContainer
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.DefaultKotlinCompilationDependencyConfigurationsContainer
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationDependencyConfigurationsContainer
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationDependencyConfigurationsContainer
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||||
import org.jetbrains.kotlin.gradle.utils.*
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
|
|
||||||
internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory :
|
internal sealed class DefaultKotlinCompilationDependencyConfigurationsFactory :
|
||||||
@@ -39,56 +41,71 @@ internal object NativeKotlinCompilationDependencyConfigurationsFactory :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal object JsKotlinCompilationDependencyConfigurationsFactory :
|
||||||
|
KotlinCompilationImplFactory.KotlinCompilationDependencyConfigurationsFactory {
|
||||||
|
|
||||||
|
override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationDependencyConfigurationsContainer {
|
||||||
|
return KotlinCompilationDependencyConfigurationsContainer(
|
||||||
|
target, compilationName, withRuntime = true,
|
||||||
|
configurationNamePrefix = lowerCamelCaseName(
|
||||||
|
target.disambiguationClassifierInPlatform, compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME }
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val KotlinTarget.disambiguationClassifierInPlatform: String?
|
||||||
|
get() = when (this) {
|
||||||
|
is KotlinJsTarget -> disambiguationClassifierInPlatform
|
||||||
|
is KotlinJsIrTarget -> disambiguationClassifierInPlatform
|
||||||
|
else -> error("Unexpected target type of $this")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun KotlinCompilationDependencyConfigurationsContainer(
|
private fun KotlinCompilationDependencyConfigurationsContainer(
|
||||||
target: KotlinTarget, compilationName: String, withRuntime: Boolean,
|
target: KotlinTarget, compilationName: String, withRuntime: Boolean,
|
||||||
|
configurationNamePrefix: String = lowerCamelCaseName(
|
||||||
|
target.disambiguationClassifier, compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME },
|
||||||
|
),
|
||||||
compileClasspathConfigurationSuffix: String = "compileClasspath",
|
compileClasspathConfigurationSuffix: String = "compileClasspath",
|
||||||
runtimeClasspathConfigurationSuffix: String = "runtimeClasspath"
|
runtimeClasspathConfigurationSuffix: String = "runtimeClasspath"
|
||||||
): KotlinCompilationDependencyConfigurationsContainer {
|
): KotlinCompilationDependencyConfigurationsContainer {
|
||||||
val compilation = "${target.disambiguationClassifier}/$compilationName"
|
val compilationCoordinates = "${target.disambiguationClassifier}/$compilationName"
|
||||||
val prefix = lowerCamelCaseName(
|
val compilation = "compilation"
|
||||||
target.disambiguationClassifier,
|
|
||||||
compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME },
|
|
||||||
"compilation"
|
|
||||||
)
|
|
||||||
|
|
||||||
val apiConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, API)).apply {
|
fun name(vararg parts: String) = lowerCamelCaseName(configurationNamePrefix, *parts)
|
||||||
|
|
||||||
|
val apiConfiguration = target.project.configurations.maybeCreate(name(compilation, API)).apply {
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
isCanBeResolved = false
|
isCanBeResolved = false
|
||||||
description = "API dependencies for $compilation"
|
description = "API dependencies for $compilationCoordinates"
|
||||||
}
|
}
|
||||||
|
|
||||||
val implementationConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, IMPLEMENTATION)).apply {
|
val implementationConfiguration = target.project.configurations.maybeCreate(name(compilation, IMPLEMENTATION)).apply {
|
||||||
extendsFrom(apiConfiguration)
|
extendsFrom(apiConfiguration)
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
isCanBeResolved = false
|
isCanBeResolved = false
|
||||||
description = "Implementation only dependencies for $compilation."
|
description = "Implementation only dependencies for $compilationCoordinates."
|
||||||
}
|
}
|
||||||
|
|
||||||
val compileOnlyConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, COMPILE_ONLY)).apply {
|
val compileOnlyConfiguration = target.project.configurations.maybeCreate(name(compilation, COMPILE_ONLY)).apply {
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
setupAsLocalTargetSpecificConfigurationIfSupported(target)
|
setupAsLocalTargetSpecificConfigurationIfSupported(target)
|
||||||
attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY))
|
attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY))
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeResolved = false
|
isCanBeResolved = false
|
||||||
description = "Compile only dependencies for $compilation."
|
description = "Compile only dependencies for $compilationCoordinates."
|
||||||
}
|
}
|
||||||
|
|
||||||
val runtimeOnlyConfiguration = target.project.configurations.maybeCreate(lowerCamelCaseName(prefix, RUNTIME_ONLY)).apply {
|
val runtimeOnlyConfiguration = target.project.configurations.maybeCreate(name(compilation, RUNTIME_ONLY)).apply {
|
||||||
isVisible = false
|
isVisible = false
|
||||||
isCanBeConsumed = false
|
isCanBeConsumed = false
|
||||||
isCanBeResolved = false
|
isCanBeResolved = false
|
||||||
description = "Runtime only dependencies for $compilation."
|
description = "Runtime only dependencies for $compilationCoordinates."
|
||||||
}
|
}
|
||||||
|
|
||||||
val compileDependencyConfiguration = target.project.configurations.maybeCreate(
|
val compileDependencyConfiguration = target.project.configurations.maybeCreate(name(compileClasspathConfigurationSuffix)).apply {
|
||||||
lowerCamelCaseName(
|
|
||||||
target.disambiguationClassifier,
|
|
||||||
compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME },
|
|
||||||
compileClasspathConfigurationSuffix
|
|
||||||
)
|
|
||||||
).apply {
|
|
||||||
extendsFrom(compileOnlyConfiguration, implementationConfiguration)
|
extendsFrom(compileOnlyConfiguration, implementationConfiguration)
|
||||||
usesPlatformOf(target)
|
usesPlatformOf(target)
|
||||||
isVisible = false
|
isVisible = false
|
||||||
@@ -97,15 +114,11 @@ private fun KotlinCompilationDependencyConfigurationsContainer(
|
|||||||
if (target.platformType != KotlinPlatformType.androidJvm) {
|
if (target.platformType != KotlinPlatformType.androidJvm) {
|
||||||
attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY))
|
attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY))
|
||||||
}
|
}
|
||||||
description = "Compile classpath for $compilation."
|
description = "Compile classpath for $compilationCoordinates."
|
||||||
}
|
}
|
||||||
|
|
||||||
val runtimeDependencyConfiguration = if (withRuntime) target.project.configurations.maybeCreate(
|
val runtimeDependencyConfiguration = if (withRuntime) target.project.configurations.maybeCreate(
|
||||||
lowerCamelCaseName(
|
name(runtimeClasspathConfigurationSuffix)
|
||||||
target.disambiguationClassifier,
|
|
||||||
compilationName.takeIf { it != KotlinCompilation.MAIN_COMPILATION_NAME },
|
|
||||||
runtimeClasspathConfigurationSuffix
|
|
||||||
)
|
|
||||||
).apply {
|
).apply {
|
||||||
extendsFrom(runtimeOnlyConfiguration, implementationConfiguration)
|
extendsFrom(runtimeOnlyConfiguration, implementationConfiguration)
|
||||||
usesPlatformOf(target)
|
usesPlatformOf(target)
|
||||||
@@ -116,7 +129,7 @@ private fun KotlinCompilationDependencyConfigurationsContainer(
|
|||||||
if (target.platformType != KotlinPlatformType.androidJvm) {
|
if (target.platformType != KotlinPlatformType.androidJvm) {
|
||||||
attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY))
|
attributes.attribute(Category.CATEGORY_ATTRIBUTE, target.project.categoryByName(Category.LIBRARY))
|
||||||
}
|
}
|
||||||
description = "Runtime classpath of $compilation."
|
description = "Runtime classpath of $compilationCoordinates."
|
||||||
} else null
|
} else null
|
||||||
|
|
||||||
return DefaultKotlinCompilationDependencyConfigurationsContainer(
|
return DefaultKotlinCompilationDependencyConfigurationsContainer(
|
||||||
|
|||||||
+31
@@ -0,0 +1,31 @@
|
|||||||
|
/*
|
||||||
|
* 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.gradle.plugin.mpp.compilationImpl.factory
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
|
||||||
|
internal object JsCompilationSourceSetsContainerFactory : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory {
|
||||||
|
override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer {
|
||||||
|
return KotlinCompilationSourceSetsContainer(
|
||||||
|
target.project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName(target, compilationName))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun defaultSourceSetName(target: KotlinTarget, compilationName: String): String {
|
||||||
|
val classifier = if (target is KotlinJsTarget && target.irTarget != null)
|
||||||
|
target.disambiguationClassifierInPlatform
|
||||||
|
else target.disambiguationClassifier
|
||||||
|
|
||||||
|
return lowerCamelCaseName(
|
||||||
|
classifier,
|
||||||
|
compilationName
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
+28
@@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* 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.gradle.plugin.mpp.compilationImpl.factory
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptions
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptionsDefault
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptions
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
|
|
||||||
|
internal object JsCompilerOptionsFactory : KotlinCompilationImplFactory.CompilerOptionsFactory {
|
||||||
|
override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationImplFactory.CompilerOptionsFactory.Options {
|
||||||
|
val compilerOptions = object : HasCompilerOptions<CompilerJsOptions> {
|
||||||
|
override val options: CompilerJsOptions =
|
||||||
|
target.project.objects.newInstance(CompilerJsOptionsDefault::class.java)
|
||||||
|
}
|
||||||
|
|
||||||
|
val kotlinOptions = object : KotlinJsOptions {
|
||||||
|
override val options: CompilerJsOptions
|
||||||
|
get() = compilerOptions.options
|
||||||
|
}
|
||||||
|
|
||||||
|
return KotlinCompilationImplFactory.CompilerOptionsFactory.Options(compilerOptions, kotlinOptions)
|
||||||
|
}
|
||||||
|
}
|
||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* 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.gradle.plugin.mpp.compilationImpl.factory
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationSourceSetsContainer
|
||||||
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
|
|
||||||
|
internal object JsIrCompilationSourceSetsContainerFactory : KotlinCompilationImplFactory.KotlinCompilationSourceSetsContainerFactory {
|
||||||
|
override fun create(target: KotlinTarget, compilationName: String): KotlinCompilationSourceSetsContainer {
|
||||||
|
return KotlinCompilationSourceSetsContainer(
|
||||||
|
target.project.kotlinExtension.sourceSets.maybeCreate(defaultSourceSetName(target, compilationName))
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun defaultSourceSetName(target: KotlinTarget, compilationName: String): String {
|
||||||
|
return lowerCamelCaseName(
|
||||||
|
if (target is KotlinJsIrTarget && target.mixedMode)
|
||||||
|
target.disambiguationClassifierInPlatform
|
||||||
|
else target.disambiguationClassifier,
|
||||||
|
compilationName
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
+26
-18
@@ -9,12 +9,11 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
import groovy.lang.Closure
|
import groovy.lang.Closure
|
||||||
|
import org.gradle.api.file.FileCollection
|
||||||
import org.gradle.api.tasks.TaskProvider
|
import org.gradle.api.tasks.TaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.dsl.*
|
import org.jetbrains.kotlin.gradle.dsl.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.HasCompilerOptions
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsCompilationDetails
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary
|
import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer
|
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer
|
||||||
@@ -22,22 +21,20 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson
|
|||||||
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
abstract class KotlinJsCompilation @Inject internal constructor(
|
open class KotlinJsCompilation @Inject internal constructor(
|
||||||
compilationDetails: JsCompilationDetails
|
private val compilation: KotlinCompilationImpl
|
||||||
) : AbstractKotlinCompilationToRunnableFiles<KotlinJsOptions>(compilationDetails),
|
) : InternalKotlinCompilation<KotlinJsOptions> by compilation.castKotlinOptionsType(),
|
||||||
KotlinCompilationWithResources<KotlinJsOptions> {
|
KotlinCompilationToRunnableFiles<KotlinJsOptions> {
|
||||||
|
|
||||||
final override val target: KotlinTarget get() = super.target
|
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
final override val compilerOptions: HasCompilerOptions<KotlinJsCompilerOptions>
|
final override val compilerOptions: HasCompilerOptions<CompilerJsOptions>
|
||||||
get() = super.compilerOptions as HasCompilerOptions<KotlinJsCompilerOptions>
|
get() = compilation.compilerOptions as HasCompilerOptions<CompilerJsOptions>
|
||||||
|
|
||||||
internal val binaries: KotlinJsBinaryContainer =
|
internal val binaries: KotlinJsBinaryContainer =
|
||||||
target.project.objects.newInstance(
|
compilation.target.project.objects.newInstance(
|
||||||
KotlinJsBinaryContainer::class.java,
|
KotlinJsBinaryContainer::class.java,
|
||||||
target,
|
compilation.target,
|
||||||
target.project.objects.domainObjectSet(JsBinary::class.java)
|
compilation.target.project.objects.domainObjectSet(JsBinary::class.java)
|
||||||
)
|
)
|
||||||
|
|
||||||
var outputModuleName: String? = null
|
var outputModuleName: String? = null
|
||||||
@@ -51,22 +48,33 @@ abstract class KotlinJsCompilation @Inject internal constructor(
|
|||||||
field = value
|
field = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated("Use compilationName instead", ReplaceWith("compilationName"))
|
||||||
|
val compilationPurpose: String get() = compilationName
|
||||||
|
|
||||||
override val processResourcesTaskName: String
|
override val processResourcesTaskName: String
|
||||||
get() = disambiguateName("processResources")
|
get() = disambiguateName("processResources")
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
@Suppress("DEPRECATION")
|
||||||
@Deprecated("Accessing task instance directly is deprecated", replaceWith = ReplaceWith("compileTaskProvider"))
|
@Deprecated("Accessing task instance directly is deprecated", replaceWith = ReplaceWith("compileTaskProvider"))
|
||||||
override val compileKotlinTask: Kotlin2JsCompile
|
override val compileKotlinTask: Kotlin2JsCompile
|
||||||
get() = super.compileKotlinTask as Kotlin2JsCompile
|
get() = compilation.compileKotlinTask as Kotlin2JsCompile
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST", "DEPRECATION")
|
@Suppress("UNCHECKED_CAST", "DEPRECATION")
|
||||||
@Deprecated("Replaced with compileTaskProvider", replaceWith = ReplaceWith("compileTaskProvider"))
|
@Deprecated("Replaced with compileTaskProvider", replaceWith = ReplaceWith("compileTaskProvider"))
|
||||||
override val compileKotlinTaskProvider: TaskProvider<out Kotlin2JsCompile>
|
override val compileKotlinTaskProvider: TaskProvider<out Kotlin2JsCompile>
|
||||||
get() = super.compileKotlinTaskProvider as TaskProvider<out Kotlin2JsCompile>
|
get() = compilation.compileKotlinTaskProvider as TaskProvider<out Kotlin2JsCompile>
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override val compileTaskProvider: TaskProvider<Kotlin2JsCompile>
|
override val compileTaskProvider: TaskProvider<Kotlin2JsCompile>
|
||||||
get() = super.compileTaskProvider as TaskProvider<Kotlin2JsCompile>
|
get() = compilation.compileTaskProvider as TaskProvider<Kotlin2JsCompile>
|
||||||
|
|
||||||
|
override val runtimeDependencyConfigurationName: String
|
||||||
|
get() = compilation.runtimeDependencyConfigurationName ?: error("Missing 'runtimeDependencyConfigurationName'")
|
||||||
|
|
||||||
|
override var runtimeDependencyFiles: FileCollection = compilation.runtimeDependencyFiles ?: error("Missing 'runtimeDependencyFiles'")
|
||||||
|
|
||||||
|
override val relatedConfigurationNames: List<String>
|
||||||
|
get() = compilation.relatedConfigurationNames
|
||||||
|
|
||||||
internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>()
|
internal val packageJsonHandlers = mutableListOf<PackageJson.() -> Unit>()
|
||||||
|
|
||||||
|
|||||||
+11
-16
@@ -6,28 +6,23 @@
|
|||||||
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
|
||||||
package org.jetbrains.kotlin.gradle.plugin.mpp
|
package org.jetbrains.kotlin.gradle.plugin.mpp
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsCompilationDetails
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsCompilationSourceSetsContainerFactory
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsCompilerOptionsFactory
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsKotlinCompilationDependencyConfigurationsFactory
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory
|
||||||
|
|
||||||
class KotlinJsCompilationFactory(
|
class KotlinJsCompilationFactory internal constructor(
|
||||||
override val target: KotlinOnlyTarget<KotlinJsCompilation>,
|
override val target: KotlinOnlyTarget<KotlinJsCompilation>,
|
||||||
|
private val compilationImplFactory: KotlinCompilationImplFactory = KotlinCompilationImplFactory(
|
||||||
|
compilerOptionsFactory = JsCompilerOptionsFactory,
|
||||||
|
compilationSourceSetsContainerFactory = JsCompilationSourceSetsContainerFactory,
|
||||||
|
compilationDependencyConfigurationsFactory = JsKotlinCompilationDependencyConfigurationsFactory
|
||||||
|
)
|
||||||
) : KotlinCompilationFactory<KotlinJsCompilation> {
|
) : KotlinCompilationFactory<KotlinJsCompilation> {
|
||||||
override val itemClass: Class<KotlinJsCompilation>
|
override val itemClass: Class<KotlinJsCompilation>
|
||||||
get() = KotlinJsCompilation::class.java
|
get() = KotlinJsCompilation::class.java
|
||||||
|
|
||||||
override fun defaultSourceSetName(compilationName: String): String {
|
|
||||||
val classifier = if (target is KotlinJsTarget && target.irTarget != null)
|
|
||||||
target.disambiguationClassifierInPlatform
|
|
||||||
else target.disambiguationClassifier
|
|
||||||
|
|
||||||
return lowerCamelCaseName(
|
|
||||||
classifier,
|
|
||||||
compilationName
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun create(name: String): KotlinJsCompilation = target.project.objects.newInstance(
|
override fun create(name: String): KotlinJsCompilation = target.project.objects.newInstance(
|
||||||
KotlinJsCompilation::class.java, JsCompilationDetails(target, name, getOrCreateDefaultSourceSet(name))
|
itemClass, compilationImplFactory.create(target, name)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
+4
-4
@@ -5,10 +5,10 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsIrCompilationDetails
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationImpl
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
abstract class KotlinJsIrCompilation @Inject internal constructor(
|
open class KotlinJsIrCompilation @Inject internal constructor(
|
||||||
compilationDetails: JsIrCompilationDetails
|
compilation: KotlinCompilationImpl
|
||||||
) : KotlinJsCompilation(compilationDetails)
|
) : KotlinJsCompilation(compilation)
|
||||||
+15
-19
@@ -5,29 +5,25 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.ir
|
package org.jetbrains.kotlin.gradle.targets.js.ir
|
||||||
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationDetailsImpl.JsIrCompilationDetails
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinCompilationFactory
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.getOrCreateDefaultSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsCompilerOptionsFactory
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsIrCompilationSourceSetsContainerFactory
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.JsKotlinCompilationDependencyConfigurationsFactory
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.factory.KotlinCompilationImplFactory
|
||||||
|
|
||||||
class KotlinJsIrCompilationFactory(
|
class KotlinJsIrCompilationFactory internal constructor(
|
||||||
override val target: KotlinJsIrTarget
|
override val target: KotlinOnlyTarget<KotlinJsIrCompilation>,
|
||||||
|
private val compilationImplFactory: KotlinCompilationImplFactory = KotlinCompilationImplFactory(
|
||||||
|
compilerOptionsFactory = JsCompilerOptionsFactory,
|
||||||
|
compilationSourceSetsContainerFactory = JsIrCompilationSourceSetsContainerFactory,
|
||||||
|
compilationDependencyConfigurationsFactory = JsKotlinCompilationDependencyConfigurationsFactory
|
||||||
|
)
|
||||||
) : KotlinCompilationFactory<KotlinJsIrCompilation> {
|
) : KotlinCompilationFactory<KotlinJsIrCompilation> {
|
||||||
override val itemClass: Class<KotlinJsIrCompilation>
|
override val itemClass: Class<KotlinJsIrCompilation>
|
||||||
get() = KotlinJsIrCompilation::class.java
|
get() = KotlinJsIrCompilation::class.java
|
||||||
|
|
||||||
override fun defaultSourceSetName(compilationName: String): String {
|
override fun create(name: String): KotlinJsIrCompilation = target.project.objects.newInstance(
|
||||||
return lowerCamelCaseName(
|
itemClass, compilationImplFactory.create(target, name)
|
||||||
if (target.mixedMode)
|
)
|
||||||
target.disambiguationClassifierInPlatform
|
|
||||||
else
|
|
||||||
target.disambiguationClassifier,
|
|
||||||
compilationName
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun create(name: String): KotlinJsIrCompilation =
|
|
||||||
target.project.objects.newInstance(
|
|
||||||
KotlinJsIrCompilation::class.java, JsIrCompilationDetails(target, name, getOrCreateDefaultSourceSet(name))
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
+4
-4
@@ -15,10 +15,10 @@ import org.gradle.workers.WorkerExecutor
|
|||||||
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
import org.jetbrains.kotlin.cli.common.arguments.K2JSCompilerArguments
|
||||||
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments
|
||||||
import org.jetbrains.kotlin.compilerRunner.ArgumentUtils
|
import org.jetbrains.kotlin.compilerRunner.ArgumentUtils
|
||||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsCompilerOptionsDefault
|
import org.jetbrains.kotlin.gradle.dsl.CompilerJsOptionsDefault
|
||||||
|
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||||
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.KotlinCompilationData
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
|
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBinaryMode.DEVELOPMENT
|
||||||
@@ -36,7 +36,7 @@ abstract class KotlinJsIrLink @Inject constructor(
|
|||||||
objectFactory: ObjectFactory,
|
objectFactory: ObjectFactory,
|
||||||
workerExecutor: WorkerExecutor
|
workerExecutor: WorkerExecutor
|
||||||
) : Kotlin2JsCompile(
|
) : Kotlin2JsCompile(
|
||||||
objectFactory.newInstance(KotlinJsCompilerOptionsDefault::class.java),
|
objectFactory.newInstance(CompilerJsOptionsDefault::class.java),
|
||||||
objectFactory,
|
objectFactory,
|
||||||
workerExecutor
|
workerExecutor
|
||||||
) {
|
) {
|
||||||
@@ -60,7 +60,7 @@ abstract class KotlinJsIrLink @Inject constructor(
|
|||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
@get:Internal
|
@get:Internal
|
||||||
internal lateinit var compilation: KotlinCompilationData<*>
|
internal lateinit var compilation: KotlinCompilation<*>
|
||||||
|
|
||||||
@Transient
|
@Transient
|
||||||
@get:Internal
|
@get:Internal
|
||||||
|
|||||||
+1
-1
@@ -22,7 +22,7 @@ open class KotlinNativeCompilationFactory internal constructor(
|
|||||||
compilerOptionsFactory = NativeCompilerOptionsFactory,
|
compilerOptionsFactory = NativeCompilerOptionsFactory,
|
||||||
compilationAssociator = NativeKotlinCompilationAssociator,
|
compilationAssociator = NativeKotlinCompilationAssociator,
|
||||||
compilationSourceSetInclusion = DefaultKotlinCompilationSourceSetInclusion(
|
compilationSourceSetInclusion = DefaultKotlinCompilationSourceSetInclusion(
|
||||||
DefaultKotlinCompilationSourceSetInclusion.AddSourcesToCompileTask.Native
|
DefaultKotlinCompilationSourceSetInclusion.NativeAddSourcesToCompileTask
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
) : KotlinCompilationFactory<KotlinNativeCompilation> {
|
) : KotlinCompilationFactory<KotlinNativeCompilation> {
|
||||||
|
|||||||
+1
-1
@@ -27,7 +27,7 @@ open class KotlinSharedNativeCompilationFactory internal constructor(
|
|||||||
compilationAssociator = NativeKotlinCompilationAssociator,
|
compilationAssociator = NativeKotlinCompilationAssociator,
|
||||||
|
|
||||||
compilationSourceSetInclusion = DefaultKotlinCompilationSourceSetInclusion(
|
compilationSourceSetInclusion = DefaultKotlinCompilationSourceSetInclusion(
|
||||||
DefaultKotlinCompilationSourceSetInclusion.AddSourcesToCompileTask.Native
|
DefaultKotlinCompilationSourceSetInclusion.NativeAddSourcesToCompileTask
|
||||||
),
|
),
|
||||||
|
|
||||||
compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver(
|
compilationFriendPathsResolver = DefaultKotlinCompilationFriendPathsResolver(
|
||||||
|
|||||||
Reference in New Issue
Block a user