diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinBinaryContainer.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinBinaryContainer.kt new file mode 100644 index 00000000000..89ec4ca4f29 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinBinaryContainer.kt @@ -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, R : DomainObjectSet<*>>( + project: Project, + platformType: KotlinPlatformType +) : KotlinOnlyTarget(project, platformType) { + abstract val binaries: R + + fun binaries(configure: R.() -> Unit) { + binaries.configure() + } + + fun binaries(configure: Closure<*>) { + ConfigureUtil.configure(configure, binaries) + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt index a68f100a5aa..dc9a22ad924 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/native/KotlinNativeTarget.kt @@ -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(project, KotlinPlatformType.native) { +) : KotlinBinaryContainer( + 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")