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