[Gradle, JS] Legacy tooling work with binaries and throw error on it

This commit is contained in:
Ilya Goncharov
2020-02-13 17:24:45 +03:00
parent 1bb6429c5c
commit 2d900e2234
2 changed files with 23 additions and 10 deletions
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.gradle.targets.js
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.TaskProvider
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
@@ -16,8 +17,8 @@ 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.KotlinTargetComponent import org.jetbrains.kotlin.gradle.plugin.KotlinTargetComponent
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests import org.jetbrains.kotlin.gradle.plugin.KotlinTargetWithTests
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinBinaryContainer
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.PRIMARY_SINGLE_COMPONENT_NAME import org.jetbrains.kotlin.gradle.plugin.mpp.PRIMARY_SINGLE_COMPONENT_NAME
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl
@@ -27,6 +28,7 @@ import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary
import org.jetbrains.kotlin.gradle.plugin.mpp.* import org.jetbrains.kotlin.gradle.plugin.mpp.*
import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.dsl.*
import org.jetbrains.kotlin.gradle.targets.js.dsl.* import org.jetbrains.kotlin.gradle.targets.js.dsl.*
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
import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs
@@ -45,7 +47,7 @@ constructor(
project: Project, project: Project,
platformType: KotlinPlatformType platformType: KotlinPlatformType
) : ) :
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType), KotlinBinaryContainer<KotlinJsCompilation, KotlinJsBinaryContainer>(project, platformType),
KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>, KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
KotlinJsTargetDsl, KotlinJsTargetDsl,
KotlinJsSubTargetContainerDsl { KotlinJsSubTargetContainerDsl {
@@ -93,8 +95,12 @@ constructor(
var producingType: KotlinJsProducingType? = null var producingType: KotlinJsProducingType? = null
@Deprecated("Use produceExecutable instead", ReplaceWith("produceExecutable()")) @Deprecated("Use produceExecutable instead", ReplaceWith("produceExecutable()"))
override val binaries: KotlinJsBinaryContainer = override val binaries: KotlinJsBinaryContainer
throw IllegalStateException("binaries is useless for legacy compiler. Use produceExecutable instead") get() = project.objects.newInstance(
KotlinJsBinaryContainer::class.java,
this,
WrapUtil.toDomainObjectSet(JsBinary::class.java)
)
var irTarget: KotlinJsIrTarget? = null var irTarget: KotlinJsIrTarget? = null
@@ -11,6 +11,7 @@ import org.gradle.api.plugins.ExtensionAware
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinBinaryContainer import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinBinaryContainer
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind.DEVELOPMENT import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind.DEVELOPMENT
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind.PRODUCTION import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind.PRODUCTION
@@ -22,7 +23,7 @@ import javax.inject.Inject
open class KotlinJsBinaryContainer open class KotlinJsBinaryContainer
@Inject @Inject
constructor( constructor(
val target: KotlinBinaryContainer<KotlinJsIrCompilation, KotlinJsBinaryContainer>, val target: KotlinBinaryContainer<KotlinJsCompilation, KotlinJsBinaryContainer>,
backingContainer: DomainObjectSet<JsBinary> backingContainer: DomainObjectSet<JsBinary>
) : DomainObjectSet<JsBinary> by backingContainer { ) : DomainObjectSet<JsBinary> by backingContainer {
val project: Project val project: Project
@@ -30,12 +31,18 @@ constructor(
private val binaryNames = mutableSetOf<String>() private val binaryNames = mutableSetOf<String>()
private val defaultCompilation: KotlinJsIrCompilation private val defaultCompilation: KotlinJsCompilation
get() = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME) get() = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)
fun executable( fun executable(
compilation: KotlinJsIrCompilation = defaultCompilation compilation: KotlinJsCompilation = defaultCompilation
) { ) {
if (compilation !is KotlinJsIrCompilation) {
throw IllegalArgumentException(
"Unable to create executable for $compilation. Use IR compiler (kotlin.js.compiler=true) instead."
)
}
(target as KotlinJsSubTargetContainerDsl).whenBrowserConfigured { (target as KotlinJsSubTargetContainerDsl).whenBrowserConfigured {
(this as KotlinJsIrSubTarget).produceExecutable() (this as KotlinJsIrSubTarget).produceExecutable()
} }
@@ -47,7 +54,7 @@ constructor(
compilation.binaries.executableInternal(compilation) compilation.binaries.executableInternal(compilation)
} }
internal fun executableInternal(compilation: KotlinJsIrCompilation) = createBinaries( internal fun executableInternal(compilation: KotlinJsCompilation) = createBinaries(
compilation = compilation, compilation = compilation,
jsBinaryType = JsBinaryType.EXECUTABLE, jsBinaryType = JsBinaryType.EXECUTABLE,
create = ::Executable create = ::Executable
@@ -60,7 +67,7 @@ constructor(
.single() .single()
private fun <T : JsBinary> createBinaries( private fun <T : JsBinary> createBinaries(
compilation: KotlinJsIrCompilation, compilation: KotlinJsCompilation,
buildVariantKinds: Collection<BuildVariantKind> = listOf(PRODUCTION, DEVELOPMENT), buildVariantKinds: Collection<BuildVariantKind> = listOf(PRODUCTION, DEVELOPMENT),
jsBinaryType: JsBinaryType, jsBinaryType: JsBinaryType,
create: (target: KotlinTarget, name: String, buildVariantKind: BuildVariantKind) -> T create: (target: KotlinTarget, name: String, buildVariantKind: BuildVariantKind) -> T
@@ -87,7 +94,7 @@ constructor(
companion object { companion object {
internal fun generateBinaryName( internal fun generateBinaryName(
compilation: KotlinJsIrCompilation, compilation: KotlinJsCompilation,
buildVariantKind: BuildVariantKind, buildVariantKind: BuildVariantKind,
jsBinaryType: JsBinaryType jsBinaryType: JsBinaryType
) = ) =