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 a52df461fcb..be53d715b2c 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 @@ -37,7 +37,7 @@ open class KotlinJsCompilation( internal val dukatMode: DukatMode get() = kotlinProperties.dukatMode ?: defaultDukatMode - protected open val defaultDukatMode: DukatMode = DukatMode.BINARY + internal open val defaultDukatMode: DukatMode = DukatMode.BINARY override val kotlinOptions: KotlinJsOptions = KotlinJsOptionsImpl() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt index 5bae1ff7ca3..a7e320a2b59 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetPreset.kt @@ -51,7 +51,9 @@ open class KotlinJsTargetPreset( name.removeJsCompilerSuffix(KotlinJsCompilerType.LEGACY), KotlinJsCompilerType.IR.lowerName ) - ) + )?.also { + it.legacyTarget = this + } this.isMpp = this@KotlinJsTargetPreset.isMpp project.whenEvaluated { 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 3495ed2dfea..c37e91c25e0 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 @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.dukat import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget +import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency import org.jetbrains.kotlin.gradle.targets.js.npm.plugins.CompilationResolverPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinRootNpmResolution @@ -26,15 +27,6 @@ internal class DukatCompilationResolverPlugin( init { val dukatMode = compilation.dukatMode - when (dukatMode) { - DukatMode.SOURCE -> compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir) - DukatMode.BINARY -> { - project.dependencies.add( - compilation.compileDependencyConfigurationName, - project.files(npmProject.externalsDir) - ) - } - } val integratedTask = project.registerTask( integratedTaskName, @@ -46,12 +38,17 @@ internal class DukatCompilationResolverPlugin( it.dependsOn(nodeJs.npmInstallTaskProvider, npmProject.packageJsonTask) } - compilation.compileKotlinTaskProvider.dependsOn(integratedTask) - val target = compilation.target - if (target is KotlinJsTarget && target.irTarget != null) { - target.irTarget?.compilations?.named(compilation.name) { - it.compileKotlinTaskProvider.dependsOn(integratedTask) + + if (target is KotlinJsIrTarget || target is KotlinJsTarget && dukatMode != DukatMode.SOURCE) { + compilation.compileKotlinTaskProvider.dependsOn(integratedTask) + } + + if (target is KotlinJsIrTarget && target.legacyTarget != null) { + target.legacyTarget?.compilations?.named(compilation.name) { + if (it.dukatMode == DukatMode.SOURCE) { + it.compileKotlinTaskProvider.dependsOn(integratedTask) + } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt index 4767d110870..cec03043954 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatExecutor.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.targets.js.dukat import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject +import org.jetbrains.kotlin.gradle.targets.js.npm.isCompatibleArchive class DukatExecutor( val nodeJs: NodeJsRootExtension, @@ -59,5 +60,27 @@ class DukatExecutor( } versionFile.writeText(version) + + gradleModelPostProcess() + } + + private fun gradleModelPostProcess() { + val compilation = npmProject.compilation + val project = npmProject.project + when (dukatMode) { + DukatMode.SOURCE -> compilation.defaultSourceSet.kotlin.srcDir(npmProject.externalsDir) + DukatMode.BINARY -> { + npmProject.externalsDir + .listFiles() + ?.filter { it.isCompatibleArchive } + ?.forEach { + project.dependencies.add( + compilation.compileDependencyConfigurationName, + project.files(it) + ) + } + + } + } } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt index 7d3d3763b64..e7303ec95cf 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatRunner.kt @@ -24,7 +24,7 @@ class DukatRunner( val args = mutableListOf() if (dukatMode == DukatMode.BINARY) { - args.add("--descriptors") + args.add("--descriptors-jar") } val qualifiedPackageName = qualifiedPackageName diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt index 4ecb70ae0ca..1b3b93b7c7f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/ir/KotlinJsIrTarget.kt @@ -19,6 +19,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinTargetWithBinaries import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName import org.jetbrains.kotlin.gradle.targets.js.JsAggregatingExecutionSource import org.jetbrains.kotlin.gradle.targets.js.KotlinJsReportAggregatingTestRun +import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetContainerDsl @@ -45,6 +46,9 @@ constructor( open var isMpp: Boolean? = null internal set + var legacyTarget: KotlinJsTarget? = null + internal set + override var moduleName: String? = null set(value) { check(!isBrowserConfigured && !isNodejsConfigured) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt index 97ac00bd065..0d9c3d2a320 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModuleBuilder.kt @@ -70,7 +70,7 @@ internal class GradleNodeModuleBuilder( } } -private val File.isCompatibleArchive +internal val File.isCompatibleArchive get() = isFile && (extension == "jar" || extension == "zip" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt index 60f73e55550..b5813f68767 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinCompilationNpmResolver.kt @@ -25,7 +25,6 @@ import org.jetbrains.kotlin.gradle.plugin.sources.KotlinDependencyScope import org.jetbrains.kotlin.gradle.plugin.sources.compilationDependencyConfigurationByScope import org.jetbrains.kotlin.gradle.plugin.sources.sourceSetDependencyConfigurationByScope import org.jetbrains.kotlin.gradle.plugin.usesPlatformOf -import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.ir.KotlinJsIrTarget import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject.Companion.PACKAGE_JSON @@ -73,9 +72,7 @@ internal class KotlinCompilationNpmResolver( val plugins: List = projectResolver.resolver.plugins .flatMap { - val target = compilation.target - // If mixedMode (BOTH) register only for legacy target - if (compilation.isMain() && ((target is KotlinJsTarget) || (target is KotlinJsIrTarget && !target.mixedMode))) { + if (compilation.isMain()) { it.createCompilationResolverPlugins(this) } else { emptyList()