KotlinToolingMetadata.json: Add konanVersion and abiVersion as extras to KotlinNativeTarget
This commit is contained in:
committed by
TeamCityServer
parent
ac8b4c1b79
commit
896e77cd32
+21
-17
@@ -3,7 +3,8 @@
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@file:Suppress("FunctionName")
|
||||
/* Associate compilations are not yet supported by the IDE. KT-34102 */
|
||||
@file:Suppress("invisible_reference", "invisible_member", "FunctionName", "DuplicatedCode")
|
||||
|
||||
package org.jetbrains.kotlin.gradle
|
||||
|
||||
@@ -11,15 +12,18 @@ import com.android.build.gradle.BaseExtension
|
||||
import org.gradle.api.JavaVersion
|
||||
import org.gradle.api.internal.project.ProjectInternal
|
||||
import org.gradle.testfixtures.ProjectBuilder
|
||||
import org.jetbrains.kotlin.compilerRunner.konanVersion
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginWrapper
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
|
||||
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
|
||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataTarget
|
||||
import org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask
|
||||
import org.jetbrains.kotlin.konan.target.KonanTarget
|
||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||
import org.jetbrains.kotlin.tooling.KotlinToolingMetadata
|
||||
import org.jetbrains.kotlin.tooling.toJsonString
|
||||
import kotlin.test.Test
|
||||
@@ -29,8 +33,8 @@ import kotlin.test.assertTrue
|
||||
class BuildKotlinToolingMetadataTest {
|
||||
|
||||
private val project = ProjectBuilder.builder().build() as ProjectInternal
|
||||
private val multiplatform get() = project.extensions.getByType(KotlinMultiplatformExtension::class.java)
|
||||
private val js get() = project.extensions.getByType(KotlinJsProjectExtension::class.java)
|
||||
private val multiplatformExtension get() = project.extensions.getByType(KotlinMultiplatformExtension::class.java)
|
||||
private val jsExtension get() = project.extensions.getByType(KotlinJsProjectExtension::class.java)
|
||||
|
||||
@Test
|
||||
fun `multiplatform empty setup`() {
|
||||
@@ -47,19 +51,17 @@ class BuildKotlinToolingMetadataTest {
|
||||
KotlinMetadataTarget::class.java.isAssignableFrom(Class.forName(metadata.projectTargets.single().target)),
|
||||
"Expect target to be implement ${KotlinMetadataTarget::class.simpleName}"
|
||||
)
|
||||
assertEquals(
|
||||
KotlinPlatformType.common.name, metadata.projectTargets.single().platformType
|
||||
)
|
||||
assertEquals(common.name, metadata.projectTargets.single().platformType)
|
||||
assertTrue(metadata.toJsonString().isNotBlank(), "Expected non blank json representation")
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `multiplatform JS JVM Android setup`() {
|
||||
fun `multiplatform JS JVM Android linuxX64 setup`() {
|
||||
project.plugins.apply("com.android.application")
|
||||
project.plugins.apply("kotlin-multiplatform")
|
||||
|
||||
val android = project.extensions.getByType(BaseExtension::class.java)
|
||||
val kotlin = multiplatform
|
||||
val kotlin = multiplatformExtension
|
||||
|
||||
android.compileSdkVersion(28)
|
||||
kotlin.android()
|
||||
@@ -68,6 +70,7 @@ class BuildKotlinToolingMetadataTest {
|
||||
nodejs()
|
||||
browser()
|
||||
}
|
||||
kotlin.linuxX64()
|
||||
|
||||
project.evaluate()
|
||||
|
||||
@@ -75,8 +78,7 @@ class BuildKotlinToolingMetadataTest {
|
||||
assertEquals(KotlinMultiplatformPluginWrapper::class.java.canonicalName, metadata.buildPlugin)
|
||||
|
||||
assertEquals(
|
||||
listOf(KotlinPlatformType.common, KotlinPlatformType.androidJvm, KotlinPlatformType.jvm, KotlinPlatformType.js)
|
||||
.map { it.name }.sorted(),
|
||||
listOf(common, androidJvm, jvm, js, native).map { it.name }.sorted(),
|
||||
metadata.projectTargets.map { it.platformType }.sorted()
|
||||
)
|
||||
}
|
||||
@@ -86,7 +88,7 @@ class BuildKotlinToolingMetadataTest {
|
||||
project.plugins.apply("kotlin-multiplatform")
|
||||
project.plugins.apply("com.android.application")
|
||||
val android = project.extensions.getByType(BaseExtension::class.java)
|
||||
val kotlin = multiplatform
|
||||
val kotlin = multiplatformExtension
|
||||
android.compileSdkVersion(28)
|
||||
kotlin.android()
|
||||
android.compileOptions.setSourceCompatibility(JavaVersion.VERSION_1_6)
|
||||
@@ -94,7 +96,7 @@ class BuildKotlinToolingMetadataTest {
|
||||
project.evaluate()
|
||||
|
||||
val androidTargetMetadata = getKotlinToolingMetadata()
|
||||
.projectTargets.single { it.platformType == KotlinPlatformType.androidJvm.name }
|
||||
.projectTargets.single { it.platformType == androidJvm.name }
|
||||
|
||||
assertEquals("1.6", androidTargetMetadata.extras["sourceCompatibility"])
|
||||
assertEquals("1.8", androidTargetMetadata.extras["targetCompatibility"])
|
||||
@@ -103,7 +105,7 @@ class BuildKotlinToolingMetadataTest {
|
||||
@Test
|
||||
fun `multiplatform JVM with different targets`() {
|
||||
project.plugins.apply("kotlin-multiplatform")
|
||||
val kotlin = multiplatform
|
||||
val kotlin = multiplatformExtension
|
||||
val jvm = kotlin.jvm()
|
||||
jvm.compilations.getByName(KotlinCompilation.MAIN_COMPILATION_NAME).kotlinOptions.jvmTarget = "12"
|
||||
jvm.compilations.getByName(KotlinCompilation.TEST_COMPILATION_NAME).kotlinOptions.jvmTarget = "10"
|
||||
@@ -118,24 +120,26 @@ class BuildKotlinToolingMetadataTest {
|
||||
@Test
|
||||
fun `multiplatform with native target`() {
|
||||
project.plugins.apply("kotlin-multiplatform")
|
||||
val kotlin = multiplatform
|
||||
val kotlin = multiplatformExtension
|
||||
kotlin.linuxX64()
|
||||
|
||||
val metadata = getKotlinToolingMetadata()
|
||||
val linuxTarget = metadata.projectTargets.single { it.platformType == KotlinPlatformType.native.name }
|
||||
val linuxTarget = metadata.projectTargets.single { it.platformType == native.name }
|
||||
assertEquals(KonanTarget.LINUX_X64.name, linuxTarget.extras["konanTarget"])
|
||||
assertEquals(project.konanVersion.toString(), linuxTarget.extras["konanVersion"])
|
||||
assertEquals(KotlinAbiVersion.CURRENT.toString(), linuxTarget.extras["abiVersion"])
|
||||
}
|
||||
|
||||
@Test
|
||||
fun js() {
|
||||
project.plugins.apply("org.jetbrains.kotlin.js")
|
||||
val kotlin = js
|
||||
val kotlin = jsExtension
|
||||
kotlin.js { nodejs() }
|
||||
|
||||
val metadata = getKotlinToolingMetadata()
|
||||
assertEquals(org.jetbrains.kotlin.gradle.plugin.KotlinJsPluginWrapper::class.java.canonicalName, metadata.buildPlugin)
|
||||
|
||||
val jsTarget = metadata.projectTargets.single { it.platformType == KotlinPlatformType.js.name }
|
||||
val jsTarget = metadata.projectTargets.single { it.platformType == js.name }
|
||||
assertEquals("true", jsTarget.extras["isNodejsConfigured"])
|
||||
assertEquals("false", jsTarget.extras["isBrowserConfigured"])
|
||||
}
|
||||
|
||||
+4
@@ -12,6 +12,7 @@ import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.Internal
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.TaskAction
|
||||
import org.jetbrains.kotlin.compilerRunner.konanVersion
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
|
||||
import org.jetbrains.kotlin.gradle.dsl.KotlinSingleTargetExtension
|
||||
@@ -26,6 +27,7 @@ import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl
|
||||
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.isCompatibilityMetadataVariantEnabled
|
||||
import org.jetbrains.kotlin.gradle.targets.metadata.isKotlinGranularMetadataEnabled
|
||||
import org.jetbrains.kotlin.library.KotlinAbiVersion
|
||||
import org.jetbrains.kotlin.tooling.KotlinToolingMetadata
|
||||
import org.jetbrains.kotlin.tooling.toJsonString
|
||||
import java.io.File
|
||||
@@ -120,6 +122,8 @@ private fun buildTargetMetadataExtras(target: KotlinTarget): Map<String, String>
|
||||
}
|
||||
is KotlinNativeTarget -> {
|
||||
extras["konanTarget"] = target.konanTarget.name
|
||||
extras["konanVersion"] = target.project.konanVersion.toString()
|
||||
extras["abiVersion"] = KotlinAbiVersion.CURRENT.toString()
|
||||
}
|
||||
}
|
||||
return extras.toMap()
|
||||
|
||||
Reference in New Issue
Block a user