From 500fceb4389f5ab6c044bc7270a2ea454cd0c550 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Fri, 25 Sep 2020 18:05:32 +0300 Subject: [PATCH] [Gradle, JS] Add binary dukat mode ^KT-42339 fixed [Gradle, JS] Prepare sources and binary modes for dukat ^KT-42339 fixed --- .../kotlin/gradle/plugin/KotlinProperties.kt | 7 +++++++ .../gradle/targets/js/KotlinJsCompilation.kt | 9 +++++++++ .../js/dukat/DukatCompilationResolverPlugin.kt | 10 +++++++++- .../kotlin/gradle/targets/js/dukat/DukatMode.kt | 16 ++++++++++++++++ .../targets/js/ir/KotlinJsIrCompilation.kt | 4 ++++ 5 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatMode.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt index f1ff0b04501..840aaf5c632 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinProperties.kt @@ -13,6 +13,7 @@ import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsPlugin.Companion.NOWARN_2JS_F import org.jetbrains.kotlin.gradle.plugin.KotlinJsCompilerType.Companion.jsCompilerProperty import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin import org.jetbrains.kotlin.gradle.plugin.statistics.KotlinBuildStatsService +import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode import org.jetbrains.kotlin.gradle.targets.native.DisabledNativeTargetsReporter import org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile import org.jetbrains.kotlin.gradle.tasks.CacheBuilder @@ -216,6 +217,12 @@ internal class PropertiesProvider private constructor(private val project: Proje val jsCompiler: KotlinJsCompilerType get() = property(jsCompilerProperty)?.let { KotlinJsCompilerType.byArgumentOrNull(it) } ?: KotlinJsCompilerType.LEGACY + /** + * Default mode of generating of Dukat + */ + val dukatMode: DukatMode? + get() = property("dukat.mode")?.let { DukatMode.byArgumentOrNull(it) } + /** * Use Kotlin/JS backend compiler type */ diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt index d8dca27d0a1..a52df461fcb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsCompilation.kt @@ -17,8 +17,10 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinJsOptionsImpl import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilationWithResources import org.jetbrains.kotlin.gradle.plugin.KotlinTarget +import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl +import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode import org.jetbrains.kotlin.gradle.targets.js.ir.JsBinary import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsBinaryContainer import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson @@ -30,6 +32,13 @@ open class KotlinJsCompilation( name: String ) : AbstractKotlinCompilationToRunnableFiles(target, name), KotlinCompilationWithResources { + private val kotlinProperties = PropertiesProvider(target.project) + + internal val dukatMode: DukatMode + get() = kotlinProperties.dukatMode ?: defaultDukatMode + + protected open val defaultDukatMode: DukatMode = DukatMode.BINARY + override val kotlinOptions: KotlinJsOptions = KotlinJsOptionsImpl() internal val binaries: KotlinJsBinaryContainer = diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt index 2ca47e0e7f7..ccf966428e2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatCompilationResolverPlugin.kt @@ -25,7 +25,15 @@ internal class DukatCompilationResolverPlugin( val separateTaskName = npmProject.compilation.disambiguateName("generateExternals") init { - compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir) + when (compilation.dukatMode) { + DukatMode.SOURCE -> compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir) + DukatMode.BINARY -> { + project.dependencies.add( + compilation.compileDependencyConfigurationName, + project.file(npmProject.externalsDir) + ) + } + } val integratedTask = project.registerTask( integratedTaskName, diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatMode.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatMode.kt new file mode 100644 index 00000000000..c4c13abbed8 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatMode.kt @@ -0,0 +1,16 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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.gradle.targets.js.dukat + +enum class DukatMode { + SOURCE, + BINARY; + + companion object { + fun byArgumentOrNull(argument: String): DukatMode? = + values().firstOrNull { it.name.equals(argument, ignoreCase = true) } + } +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt index f707c041bf8..ae143b8b08a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrCompilation.kt @@ -9,6 +9,7 @@ import org.gradle.api.file.SourceDirectorySet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.targets.js.dukat.DukatMode import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName class KotlinJsIrCompilation( @@ -16,6 +17,9 @@ class KotlinJsIrCompilation( name: String ) : KotlinJsCompilation(target, name) { + override val defaultDukatMode: DukatMode + get() = DukatMode.SOURCE + internal val allSources: MutableSet = mutableSetOf() override fun addSourcesToCompileTask(sourceSet: KotlinSourceSet, addAsCommonSources: Lazy) {