diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt index eaa8905a013..b73f8a3fd60 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/BuildKotlinToolingMetadataTest.kt @@ -75,17 +75,15 @@ class BuildKotlinToolingMetadataTest { assertEquals(project.getKotlinPluginVersion(), metadata.buildPluginVersion) assertEquals(1, metadata.projectTargets.size, "Expected one target (metadata)") val targetMetadata = metadata.projectTargets.single() - if (kpmModelMappingEnabled) { - assertTrue( - KotlinGradleFragment::class.java.isAssignableFrom(Class.forName(targetMetadata.target)), - "Expect target to be implement ${KotlinGradleFragment::class.simpleName}" - ) + val targetClass = if (kpmModelMappingEnabled) { + KotlinGradleFragment::class } else { - assertTrue( - KotlinMetadataTarget::class.java.isAssignableFrom(Class.forName(targetMetadata.target)), - "Expect target to be implement ${KotlinMetadataTarget::class.simpleName}" - ) + KotlinMetadataTarget::class } + assertTrue( + targetClass.java.isAssignableFrom(Class.forName(targetMetadata.target)), + "Expect target to implement ${targetClass.simpleName}" + ) assertEquals(common.name, targetMetadata.platformType) assertTrue(metadata.toJsonString().isNotBlank(), "Expected non blank json representation") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt index 96489ca35e9..44dd4d14d13 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tooling/BuildKotlinToolingMetadataTask.kt @@ -105,33 +105,29 @@ private fun Project.buildProjectSettings(): KotlinToolingMetadata.ProjectSetting ) } -private fun KpmGradleProjectModelContainer.buildProjectTargets(): List { - val result = mutableSetOf() - val mainModules = modules.filter { it.isMain } - - for (module in mainModules) { - result += KotlinToolingMetadata.ProjectTargetMetadata( - target = module.common.javaClass.canonicalName, - platformType = KotlinPlatformType.common.name, - extras = KotlinToolingMetadata.ProjectTargetMetadata.Extras() - ) - - for (variant in module.variants) { - result += KotlinToolingMetadata.ProjectTargetMetadata( - target = variant.javaClass.canonicalName, - platformType = variant.platformType.name, - extras = KotlinToolingMetadata.ProjectTargetMetadata.Extras( - jvm = variant.jvmExtrasOrNull(), - android = variant.androidExtrasOrNull(), - js = variant.jsExtrasOrNull(), - native = variant.nativeExtrasOrNull() - ) +private fun KpmGradleProjectModelContainer.buildProjectTargets(): List = + modules + .filter { it.isMain } + .flatMap { module -> + val commonTarget = KotlinToolingMetadata.ProjectTargetMetadata( + target = module.common.javaClass.canonicalName, + platformType = KotlinPlatformType.common.name, + extras = KotlinToolingMetadata.ProjectTargetMetadata.Extras() ) - } - } - return result.toList() -} + module.variants.map { variant -> + KotlinToolingMetadata.ProjectTargetMetadata( + target = variant.javaClass.canonicalName, + platformType = variant.platformType.name, + extras = KotlinToolingMetadata.ProjectTargetMetadata.Extras( + jvm = variant.jvmExtrasOrNull(), + android = variant.androidExtrasOrNull(), + js = variant.jsExtrasOrNull(), + native = variant.nativeExtrasOrNull() + ) + ) + } + commonTarget + }.distinct() private fun KotlinGradleVariant.jvmExtrasOrNull() = when (this) {