[Gradle, JS] Extract Binary Container from Native

This commit is contained in:
Ilya Goncharov
2020-02-11 17:29:21 +03:00
parent 9836520287
commit c46fa83924
2 changed files with 33 additions and 12 deletions
@@ -0,0 +1,28 @@
/*
* Copyright 2010-2020 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
import groovy.lang.Closure
import org.gradle.api.DomainObjectSet
import org.gradle.api.Project
import org.gradle.util.ConfigureUtil
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
abstract class KotlinBinaryContainer<T : KotlinCompilation<*>, R : DomainObjectSet<*>>(
project: Project,
platformType: KotlinPlatformType
) : KotlinOnlyTarget<T>(project, platformType) {
abstract val binaries: R
fun binaries(configure: R.() -> Unit) {
binaries.configure()
}
fun binaries(configure: Closure<*>) {
ConfigureUtil.configure(configure, binaries)
}
}
@@ -6,11 +6,9 @@
@file:Suppress("PackageDirectoryMismatch") // Old package for compatibility
package org.jetbrains.kotlin.gradle.plugin.mpp
import groovy.lang.Closure
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.Project
import org.gradle.api.attributes.Attribute
import org.gradle.util.ConfigureUtil
import org.gradle.util.WrapUtil
import org.jetbrains.kotlin.gradle.dsl.KotlinNativeBinaryContainer
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
@@ -25,24 +23,19 @@ import javax.inject.Inject
open class KotlinNativeTarget @Inject constructor(
project: Project,
val konanTarget: KonanTarget
) : KotlinOnlyTarget<KotlinNativeCompilation>(project, KotlinPlatformType.native) {
) : KotlinBinaryContainer<KotlinNativeCompilation, KotlinNativeBinaryContainer>(
project,
KotlinPlatformType.native
) {
init {
attributes.attribute(konanTargetAttribute, konanTarget.name)
}
val binaries =
override val binaries =
// Use newInstance to allow accessing binaries by their names in Groovy using the extension mechanism.
project.objects.newInstance(KotlinNativeBinaryContainer::class.java, this, WrapUtil.toDomainObjectSet(NativeBinary::class.java))
fun binaries(configure: KotlinNativeBinaryContainer.() -> Unit) {
binaries.configure()
}
fun binaries(configure: Closure<*>) {
ConfigureUtil.configure(configure, binaries)
}
override val artifactsTaskName: String
get() = disambiguateName("binaries")