Fix cold metadata compilation when depending on interopBundle
diff --git a/idea/kotlin-gradle-tooling/src/KotlinCommonizerModelBuilder.kt b/idea/kotlin-gradle-tooling/src/KotlinCommonizerModelBuilder.kt
index 32a3ff8..60cb72e 100644
--- a/idea/kotlin-gradle-tooling/src/KotlinCommonizerModelBuilder.kt
+++ b/idea/kotlin-gradle-tooling/src/KotlinCommonizerModelBuilder.kt
@@ -6,7 +6,6 @@
package org.jetbrains.kotlin.gradle
import org.gradle.api.Project
-import org.gradle.api.logging.Logging
import org.jetbrains.plugins.gradle.tooling.AbstractModelBuilderService
import org.jetbrains.plugins.gradle.tooling.ErrorMessageBuilder
import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext
@@ -17,6 +16,7 @@
class KotlinCommonizerModelBuilder : AbstractModelBuilderService() {
companion object {
+ private const val INTEROP_BUNDLE_TASK_NAME = "buildInteropBundleKlib"
private const val COMMONIZER_TASK_NAME = "runCommonizer"
private const val COMMONIZER_SETUP_CLASS = "org.jetbrains.kotlin.gradle.targets.native.internal.KotlinNativePlatformDependenciesKt"
}
@@ -47,6 +47,10 @@
tasks.add(COMMONIZER_TASK_NAME)
startParameter.setTaskNames(tasks)
}
+ if (project.tasks.findByName(INTEROP_BUNDLE_TASK_NAME) != null) {
+ tasks.add(INTEROP_BUNDLE_TASK_NAME)
+ startParameter.setTaskNames(startParameter.taskNames + INTEROP_BUNDLE_TASK_NAME)
+ }
}
} catch (e: Exception) {
project.logger.error(
@@ -61,4 +65,4 @@
project, e, "EnableCommonizerTask error"
).withDescription("Unable to create $COMMONIZER_TASK_NAME task.")
}
-}
\ No newline at end of file
+}
diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
index f4d7597..4d5d9a6 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/metadata/KotlinMetadataTargetConfigurator.kt
@@ -460,11 +460,7 @@
dependencyCompilation?.output?.classesDirs.takeIf { hierarchySourceSet != sourceSet }
}
- // TODO NOW: This is called during configuration time, which prevents initial artifact of being built!
val artifactView = fromFiles.incoming.artifactView { view ->
- view.attributes.attribute(
- COMMONIZER_TARGET_ATTRIBUTE, project.getCommonizerTarget(compilation)?.identityString ?: "**none**"
- )
view.componentFilter { id ->
allResolutionsByComponentId[id].let { resolutions ->
resolutions == null || resolutions.any { it !is MetadataDependencyResolution.ExcludeAsUnrequested }
@@ -472,8 +468,20 @@
}
}
+ val keepOriginalDependenciesOnlyArtifactView = fromFiles.incoming.artifactView { view ->
+ view.attributes.attribute(
+ COMMONIZER_TARGET_ATTRIBUTE, project.getCommonizerTarget(compilation)?.identityString ?: "**none**"
+ )
+ view.componentFilter { id ->
+ allResolutionsByComponentId[id].let { resolutions ->
+ resolutions != null && resolutions.all { it is MetadataDependencyResolution.KeepOriginalDependency }
+ }
+ }
+ }
+
mutableSetOf<Any /* File | FileCollection */>().apply {
addAll(dependsOnCompilationOutputs)
+ add(keepOriginalDependenciesOnlyArtifactView.files)
artifactView.artifacts.forEach { artifact ->
val resolutions = allResolutionsByComponentId[artifact.id.componentIdentifier]
if (resolutions == null) {