[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.Project
import org.gradle.api.tasks.TaskProvider
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
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.KotlinTargetComponent
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.KotlinOnlyTarget
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.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.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.KotlinJsIrTarget
import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs
@@ -45,7 +47,7 @@ constructor(
project: Project,
platformType: KotlinPlatformType
) :
KotlinOnlyTarget<KotlinJsCompilation>(project, platformType),
KotlinBinaryContainer<KotlinJsCompilation, KotlinJsBinaryContainer>(project, platformType),
KotlinTargetWithTests<JsAggregatingExecutionSource, KotlinJsReportAggregatingTestRun>,
KotlinJsTargetDsl,
KotlinJsSubTargetContainerDsl {
@@ -93,8 +95,12 @@ constructor(
var producingType: KotlinJsProducingType? = null
@Deprecated("Use produceExecutable instead", ReplaceWith("produceExecutable()"))
override val binaries: KotlinJsBinaryContainer =
throw IllegalStateException("binaries is useless for legacy compiler. Use produceExecutable instead")
override val binaries: KotlinJsBinaryContainer
get() = project.objects.newInstance(
KotlinJsBinaryContainer::class.java,
this,
WrapUtil.toDomainObjectSet(JsBinary::class.java)
)
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.KotlinTarget
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.DEVELOPMENT
import org.jetbrains.kotlin.gradle.targets.js.dsl.BuildVariantKind.PRODUCTION
@@ -22,7 +23,7 @@ import javax.inject.Inject
open class KotlinJsBinaryContainer
@Inject
constructor(
val target: KotlinBinaryContainer<KotlinJsIrCompilation, KotlinJsBinaryContainer>,
val target: KotlinBinaryContainer<KotlinJsCompilation, KotlinJsBinaryContainer>,
backingContainer: DomainObjectSet<JsBinary>
) : DomainObjectSet<JsBinary> by backingContainer {
val project: Project
@@ -30,12 +31,18 @@ constructor(
private val binaryNames = mutableSetOf<String>()
private val defaultCompilation: KotlinJsIrCompilation
private val defaultCompilation: KotlinJsCompilation
get() = target.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME)
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 {
(this as KotlinJsIrSubTarget).produceExecutable()
}
@@ -47,7 +54,7 @@ constructor(
compilation.binaries.executableInternal(compilation)
}
internal fun executableInternal(compilation: KotlinJsIrCompilation) = createBinaries(
internal fun executableInternal(compilation: KotlinJsCompilation) = createBinaries(
compilation = compilation,
jsBinaryType = JsBinaryType.EXECUTABLE,
create = ::Executable
@@ -60,7 +67,7 @@ constructor(
.single()
private fun <T : JsBinary> createBinaries(
compilation: KotlinJsIrCompilation,
compilation: KotlinJsCompilation,
buildVariantKinds: Collection<BuildVariantKind> = listOf(PRODUCTION, DEVELOPMENT),
jsBinaryType: JsBinaryType,
create: (target: KotlinTarget, name: String, buildVariantKind: BuildVariantKind) -> T
@@ -87,7 +94,7 @@ constructor(
companion object {
internal fun generateBinaryName(
compilation: KotlinJsIrCompilation,
compilation: KotlinJsCompilation,
buildVariantKind: BuildVariantKind,
jsBinaryType: JsBinaryType
) =