diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSharedMultiplatformModuleBuilder.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSharedMultiplatformModuleBuilder.kt new file mode 100644 index 00000000000..934724a1103 --- /dev/null +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinGradleSharedMultiplatformModuleBuilder.kt @@ -0,0 +1,89 @@ +/* + * Copyright 2010-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.configuration + +class KotlinGradleSharedMultiplatformModuleBuilder : KotlinGradleAbstractMultiplatformModuleBuilder() { + + private val commonName: String = "common" + private var jvmTargetName: String = "jvm" + private var jsTargetName: String = "js" + private var nativeTargetName: String = "ios" + + private val commonSourceName get() = "$commonName$productionSuffix" + private val commonTestName get() = "$commonName$testSuffix" + private val jvmSourceName get() = "$jvmTargetName$productionSuffix" + private val jvmTestName get() = "$jvmTargetName$testSuffix" + private val jsSourceName get() = "$jsTargetName$productionSuffix" + private val jsTestName get() = "$jsTargetName$testSuffix" + private val nativeSourceName get() = "$nativeTargetName$productionSuffix" + private val nativeTestName get() = "$nativeTargetName$testSuffix" + + override fun getBuilderId() = "kotlin.gradle.multiplatform.shared" + + override fun getPresentableName() = "Kotlin (Multiplatform Library)" + + override fun getDescription() = + "Multiplatform Gradle projects allow sharing the same Kotlin code between all three main platforms (JVM, JS, iOS)." + + override fun buildMultiPlatformPart(): String { + return """ + kotlin { + targets { + fromPreset(presets.jvm, '$jvmTargetName') + fromPreset(presets.js, '$jsTargetName') + // For ARM, preset should be changed to presets.iosArm32 or presets.iosArm64 + // For Linux, preset should be changed to e.g. presets.linuxX64 + // For MacOS, preset should be changed to e.g. presets.macosX64 + fromPreset(presets.iosX64, '$nativeTargetName') + } + sourceSets { + $commonSourceName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-common' + } + } + $commonTestName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-test-common' + implementation 'org.jetbrains.kotlin:kotlin-test-annotations-common' + } + } + $jvmSourceName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' + } + } + $jvmTestName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-test' + implementation 'org.jetbrains.kotlin:kotlin-test-junit' + } + } + $jsSourceName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-js' + } + } + $jsTestName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-test-js' + } + } + $nativeSourceName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-stdlib-native' + } + } + $nativeTestName { + dependencies { + implementation 'org.jetbrains.kotlin:kotlin-test-native' + } + } + } + } + """.trimIndent() + } +} \ No newline at end of file diff --git a/idea/src/META-INF/gradle-java.xml b/idea/src/META-INF/gradle-java.xml index d3ad59251fc..f58738a5ce0 100644 --- a/idea/src/META-INF/gradle-java.xml +++ b/idea/src/META-INF/gradle-java.xml @@ -79,5 +79,6 @@ + diff --git a/idea/src/META-INF/gradle-java.xml.as33 b/idea/src/META-INF/gradle-java.xml.as33 index c617a7ac134..5a61f191c18 100644 --- a/idea/src/META-INF/gradle-java.xml.as33 +++ b/idea/src/META-INF/gradle-java.xml.as33 @@ -79,5 +79,6 @@ + diff --git a/idea/src/META-INF/gradle.xml.181 b/idea/src/META-INF/gradle.xml.181 index 7b9319b737d..eb367bcb898 100644 --- a/idea/src/META-INF/gradle.xml.181 +++ b/idea/src/META-INF/gradle.xml.181 @@ -88,6 +88,7 @@ +