[Gradle, JS] Move gradle post processing after executing of dukat

^KT-42339 fixed

[Gradle, JS] Use 2 integrated tasks for dukat in both mode

^KT-42339 fixed

[Gradle, JS] Dukat into jar

^KT-42339 fixed
This commit is contained in:
Ilya Goncharov
2020-10-05 16:18:24 +03:00
parent 4eea52e4e7
commit af65365d6a
8 changed files with 45 additions and 22 deletions

View File

@@ -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()

View File

@@ -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 {

View File

@@ -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<IntegratedDukatTask>(
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)
}
}
}

View File

@@ -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)
)
}
}
}
}
}

View File

@@ -24,7 +24,7 @@ class DukatRunner(
val args = mutableListOf<String>()
if (dukatMode == DukatMode.BINARY) {
args.add("--descriptors")
args.add("--descriptors-jar")
}
val qualifiedPackageName = qualifiedPackageName

View File

@@ -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) {

View File

@@ -70,7 +70,7 @@ internal class GradleNodeModuleBuilder(
}
}
private val File.isCompatibleArchive
internal val File.isCompatibleArchive
get() = isFile
&& (extension == "jar"
|| extension == "zip"

View File

@@ -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<CompilationResolverPlugin> = 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()