From a5f48e295efceb20ae54269a954bd98e596340b9 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Wed, 1 Feb 2023 10:39:14 +0200 Subject: [PATCH] [Build] Add configuration cache compatibility workaround for `MetadataDependencyTransformationTask` --- libraries/stdlib/wasm/build.gradle.kts | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/libraries/stdlib/wasm/build.gradle.kts b/libraries/stdlib/wasm/build.gradle.kts index 01ece239e04..d76cbdd62b3 100644 --- a/libraries/stdlib/wasm/build.gradle.kts +++ b/libraries/stdlib/wasm/build.gradle.kts @@ -1,6 +1,9 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinCompile +import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyTransformationTask import org.jetbrains.kotlin.gradle.targets.js.d8.D8RootPlugin import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrLink +import java.lang.reflect.Field +import java.lang.reflect.Modifier plugins { `maven-publish` @@ -189,10 +192,27 @@ if (!isConfigurationCacheDisabled) { it is org.jetbrains.kotlin.gradle.tooling.BuildKotlinToolingMetadataTask || it is org.jetbrains.kotlin.gradle.plugin.mpp.GenerateProjectStructureMetadata || it is org.jetbrains.kotlin.gradle.plugin.mpp.TransformKotlinGranularMetadata + || it is MetadataDependencyTransformationTask }.configureEach { onlyIf { logger.warn("Task '$name' is disabled due to incompatibility with configuration cache. KT-49933") false } } -} \ No newline at end of file + tasks.withType().configureEach { + try { + val field = MetadataDependencyTransformationTask::class.java.getDeclaredField("transformationParameters") + field.isAccessible = true + val params = field.get(this) + val removePropertiesValues = setOf("sourceSetVisibilityProvider", "resolvedMetadataConfiguration") + for (property in removePropertiesValues) { + val resolvedMetadataConfiguration = params::class.java.getDeclaredField(property) + resolvedMetadataConfiguration.isAccessible = true + resolvedMetadataConfiguration.set(params, null) + } + logger.warn("Applied configuration cache compatibility workaround for `MetadataDependencyTransformationTask`") + } catch (t: Throwable) { + logger.warn("Failed to apply workaround for configuration cache compatibility for `MetadataDependencyTransformationTask`") + } + } +}