From 13594c80aa4a8e01bc9ce20bbda030761a46c620 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Tue, 18 Feb 2020 16:50:39 +0300 Subject: [PATCH] [Gradle, JS] Declare default configurations in js single plugin Because in Kotlin DSL we want to declare configurations in methods instead of extensions of Strings We need to create configurations explicitly in plugin --- .../gradle/targets/js/KotlinJsPlugin.kt | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt index c493d3d2d65..a677a0fe670 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsPlugin.kt @@ -10,10 +10,12 @@ import org.gradle.api.Project import org.gradle.api.plugins.JavaBasePlugin import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.MAIN_COMPILATION_NAME +import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.Companion.TEST_COMPILATION_NAME import org.jetbrains.kotlin.gradle.plugin.configureDefaultVersionsResolutionStrategy import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsSingleTargetPreset import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrSingleTargetPreset -import org.jetbrains.kotlin.gradle.utils.checkGradleCompatibility +import org.jetbrains.kotlin.gradle.utils.* open class KotlinJsPlugin( private val kotlinPluginVersion: String @@ -34,5 +36,30 @@ open class KotlinJsPlugin( irPreset = KotlinJsIrSingleTargetPreset(project, kotlinPluginVersion) legacyPreset = KotlinJsSingleTargetPreset(project, kotlinPluginVersion) } + + // Explicitly create configurations for main and test + // It is because in single platform we want to declare dependencies with methods not with strings in Kotlin DSL + // implementation("foo") instead of "implementation"("foo") + val configurations = project.configurations + listOf(MAIN_COMPILATION_NAME, TEST_COMPILATION_NAME) + // in main compilation we don't need additional name + .map { it.removeSuffix(MAIN_COMPILATION_NAME) } + .forEach { baseCompilationName -> + listOf( + COMPILE_ONLY, + COMPILE, + IMPLEMENTATION, + API, + RUNTIME_ONLY, + RUNTIME + ).forEach { baseConfigurationName -> + configurations.maybeCreate( + lowerCamelCaseName( + baseCompilationName, + baseConfigurationName + ) + ) + } + } } } \ No newline at end of file