From f49907092b4c58245971dea5caf329d4ebf2c102 Mon Sep 17 00:00:00 2001 From: Sergey Rostov Date: Sat, 8 Jun 2019 10:40:05 +0300 Subject: [PATCH] IDE, wizards: update Gradle Kotlin/JS support Split Kotlin/JS configuration for browser and nodejs. Add corresponding Kotlin/JS sub targets DSL calling. --- .../GradleKotlinFrameworkSupportProvider.kt | 46 +++++++++++++++---- ...DslGradleKotlinFrameworkSupportProvider.kt | 31 ++++++++++++- idea/resources/META-INF/gradle-java.xml | 6 ++- idea/resources/META-INF/gradle-java.xml.183 | 6 ++- idea/resources/META-INF/gradle-java.xml.as33 | 6 ++- idea/resources/META-INF/gradle-java.xml.as34 | 6 ++- 6 files changed, 83 insertions(+), 18 deletions(-) diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt index a9f1b478c2d..1aa0fc2aef9 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/GradleKotlinFrameworkSupportProvider.kt @@ -100,7 +100,7 @@ abstract class GradleKotlinFrameworkSupportProvider( } buildScriptData.addPluginDefinitionInPluginsGroup( - getPluginExpression() + if (specifyPluginVersionIfNeeded) " version '$kotlinVersion'" else "" + getPluginExpression() + if (specifyPluginVersionIfNeeded) " version '$kotlinVersion'" else "" ) } else { if (additionalRepository != null) { @@ -147,7 +147,7 @@ abstract class GradleKotlinFrameworkSupportProvider( KotlinFUSLogger.log(FUSEventGroups.NPWizards, this.javaClass.simpleName) } - protected open fun updateSettingsScript(settingsBuilder: SettingsScriptBuilder, specifyPluginVersionIfNeeded: Boolean) { } + protected open fun updateSettingsScript(settingsBuilder: SettingsScriptBuilder, specifyPluginVersionIfNeeded: Boolean) {} protected abstract fun getDependencies(sdk: Sdk?): List protected open fun getTestDependencies(): List = listOf() @@ -187,21 +187,51 @@ open class GradleKotlinJavaFrameworkSupportProvider( override fun getDescription() = "A Kotlin library or application targeting the JVM" } -open class GradleKotlinJSFrameworkSupportProvider( - frameworkTypeId: String = "KOTLIN_JS", - displayName: String = "Kotlin/JS" +abstract class GradleKotlinJSFrameworkSupportProvider( + frameworkTypeId: String, + displayName: String ) : GradleKotlinFrameworkSupportProvider(frameworkTypeId, displayName, KotlinIcons.JS) { + abstract val jsSubTargetName: String + + override fun addSupport( + buildScriptData: BuildScriptDataBuilder, + module: Module, + sdk: Sdk?, + specifyPluginVersionIfNeeded: Boolean, + explicitPluginVersion: String? + ) { + super.addSupport(buildScriptData, module, sdk, specifyPluginVersionIfNeeded, explicitPluginVersion) + + buildScriptData.addOther("kotlin.target.$jsSubTargetName { }") + } override fun getPluginId() = KotlinJsGradleModuleConfigurator.KOTLIN_JS override fun getPluginExpression() = "id 'org.jetbrains.kotlin.js'" - override fun getDependencies(sdk: Sdk?) = listOf(MAVEN_JS_STDLIB_ID) - override fun getTestDependencies() = listOf(MAVEN_JS_TEST_ID) - override fun getDescription() = "A Kotlin library or application targeting JavaScript" } +open class GradleKotlinJSBrowserFrameworkSupportProvider( + frameworkTypeId: String = "KOTLIN_JS_BROWSER", + displayName: String = "Kotlin/JS for browser" +) : GradleKotlinJSFrameworkSupportProvider(frameworkTypeId, displayName) { + override val jsSubTargetName: String + get() = "browser" + + override fun getDescription() = "A Kotlin library or application targeting JavaScript for browser" +} + +open class GradleKotlinJSNodeFrameworkSupportProvider( + frameworkTypeId: String = "KOTLIN_JS_NODE", + displayName: String = "Kotlin/JS for Node.js" +) : GradleKotlinJSFrameworkSupportProvider(frameworkTypeId, displayName) { + override val jsSubTargetName: String + get() = "nodejs" + + override fun getDescription() = "A Kotlin library or application targeting JavaScript for Node.js" +} + class GradleKotlinMPPFrameworkSupportProvider : GradleKotlinFrameworkSupportProvider( "KOTLIN_MPP", "Kotlin (Multiplatform - Experimental)", KotlinIcons.MPP ) { diff --git a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslGradleKotlinFrameworkSupportProvider.kt b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslGradleKotlinFrameworkSupportProvider.kt index f5407f4404f..afcc49d2898 100644 --- a/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslGradleKotlinFrameworkSupportProvider.kt +++ b/idea/idea-gradle/src/org/jetbrains/kotlin/idea/configuration/KotlinDslGradleKotlinFrameworkSupportProvider.kt @@ -144,8 +144,23 @@ class KotlinDslGradleKotlinJavaFrameworkSupportProvider : } } -class KotlinDslGradleKotlinJSFrameworkSupportProvider : - KotlinDslGradleKotlinFrameworkSupportProvider("KOTLIN_JS", "Kotlin/JS", KotlinIcons.JS) { +abstract class AbstractKotlinDslGradleKotlinJSFrameworkSupportProvider( + frameworkTypeId: String, + displayName: String +) : KotlinDslGradleKotlinFrameworkSupportProvider(frameworkTypeId, displayName, KotlinIcons.JS) { + abstract val jsSubTargetName: String + + override fun addSupport( + projectId: ProjectId, + module: Module, + rootModel: ModifiableRootModel, + modifiableModelsProvider: ModifiableModelsProvider, + buildScriptData: BuildScriptDataBuilder + ) { + super.addSupport(projectId, module, rootModel, modifiableModelsProvider, buildScriptData) + + buildScriptData.addOther("kotlin.target.$jsSubTargetName { }") + } override fun getOldSyntaxPluginDefinition(): String = "plugin(\"${KotlinJsGradleModuleConfigurator.KOTLIN_JS}\")" override fun getPluginDefinition(): String = "id(\"org.jetbrains.kotlin.js\")" @@ -153,3 +168,15 @@ class KotlinDslGradleKotlinJSFrameworkSupportProvider : override fun getRuntimeLibrary(rootModel: ModifiableRootModel, version: String?) = "implementation(${getKotlinModuleDependencySnippet(MAVEN_JS_STDLIB_ID.removePrefix("kotlin-"), version)})" } + +class KotlinDslGradleKotlinJSBrowserFrameworkSupportProvider : + AbstractKotlinDslGradleKotlinJSFrameworkSupportProvider("KOTLIN_JS_BROWSER", "Kotlin/JS for browser") { + override val jsSubTargetName: String + get() = "browser" +} + +class KotlinDslGradleKotlinJSNodeFrameworkSupportProvider : + AbstractKotlinDslGradleKotlinJSFrameworkSupportProvider("KOTLIN_JS_NODE", "Kotlin/JS for Node.js") { + override val jsSubTargetName: String + get() = "Node.js" +} diff --git a/idea/resources/META-INF/gradle-java.xml b/idea/resources/META-INF/gradle-java.xml index 6ee0d5464e5..18558b58a1f 100644 --- a/idea/resources/META-INF/gradle-java.xml +++ b/idea/resources/META-INF/gradle-java.xml @@ -1,9 +1,11 @@ - + + - + + diff --git a/idea/resources/META-INF/gradle-java.xml.183 b/idea/resources/META-INF/gradle-java.xml.183 index 5b229499905..ba0a651f0ac 100644 --- a/idea/resources/META-INF/gradle-java.xml.183 +++ b/idea/resources/META-INF/gradle-java.xml.183 @@ -1,9 +1,11 @@ - + + - + + diff --git a/idea/resources/META-INF/gradle-java.xml.as33 b/idea/resources/META-INF/gradle-java.xml.as33 index 6ee0d5464e5..18558b58a1f 100644 --- a/idea/resources/META-INF/gradle-java.xml.as33 +++ b/idea/resources/META-INF/gradle-java.xml.as33 @@ -1,9 +1,11 @@ - + + - + + diff --git a/idea/resources/META-INF/gradle-java.xml.as34 b/idea/resources/META-INF/gradle-java.xml.as34 index 6ee0d5464e5..18558b58a1f 100644 --- a/idea/resources/META-INF/gradle-java.xml.as34 +++ b/idea/resources/META-INF/gradle-java.xml.as34 @@ -1,9 +1,11 @@ - + + - + +