diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt index b4a85cb5999..5d90a36dda1 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/DukatTask.kt @@ -19,7 +19,6 @@ abstract class DukatTask( override val compilation: KotlinJsCompilation ) : DefaultTask(), RequiresNpmDependencies { @get:Internal - @Transient protected val nodeJs = NodeJsRootPlugin.apply(project.rootProject) @get:Internal @@ -46,12 +45,14 @@ abstract class DukatTask( @Input var externalsOutputFormat: ExternalsOutputFormat = ExternalsOutputFormat.SOURCE + private val projectPath = project.path + private val compilationResolution get() = nodeJs.npmResolutionManager.requireInstalled( services, logger - )[project.path][compilationName] + )[projectPath][compilationName] @get:Internal val dts: List diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/IntegratedDukatTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/IntegratedDukatTask.kt index 51a7dcca1b8..d2a43c09ab0 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/IntegratedDukatTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/dukat/IntegratedDukatTask.kt @@ -20,22 +20,22 @@ constructor( override val considerGeneratingFlag: Boolean = true + private val npmProject = compilation.npmProject + @get:OutputDirectory override val destinationDir: File by lazy { - compilation.npmProject.externalsDir + npmProject.externalsDir } - @delegate:Transient - private val executor by lazy { - DukatExecutor( + private val executor + get() = DukatExecutor( nodeJs, dts, externalsOutputFormat, - compilation.npmProject, + npmProject, true, compareInputs = false ) - } @TaskAction override fun run() { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt index 5679b63de25..b6f0565bf57 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/TasksRequirements.kt @@ -12,10 +12,10 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.toDeclaration class TasksRequirements { - private val _byTask = mutableMapOf>() + private val _byTask = mutableMapOf>() private val byCompilation = mutableMapOf>() - val byTask: Map> + val byTask: Map> get() = _byTask internal fun getCompilationNpmRequirements(compilationName: String): Set = @@ -25,7 +25,7 @@ class TasksRequirements { fun addTaskRequirements(task: RequiresNpmDependencies) { val requirements = task.requiredNpmDependencies - _byTask[task] = requirements + _byTask[task.getPath()] = requirements val requiredNpmDependencies = requirements .asSequence() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt index c598f1df086..017742a38cb 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/KotlinNpmResolutionManager.kt @@ -232,13 +232,12 @@ class KotlinNpmResolutionManager(private val nodeJsSettings: NodeJsRootExtension internal fun checkRequiredDependencies(task: T, services: ServiceRegistry, logger: Logger, projectPath: String) where T : RequiresNpmDependencies, T : Task { - val project = task.project val requestedTaskDependencies = requireInstalled(services, logger, "before $task execution")[projectPath].taskRequirements - val targetRequired = requestedTaskDependencies[task]?.toSet() ?: setOf() + val targetRequired = requestedTaskDependencies[task.path]?.toSet() ?: setOf() task.requiredNpmDependencies.forEach { check(it in targetRequired) { - "${it.createDependency(project)} required by $task was not found resolved at the time of nodejs package manager call. " + + "${it.createDependency(task.project)} required by $task was not found resolved at the time of nodejs package manager call. " + "This may be caused by changing $task configuration after npm dependencies resolution." } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt index 8b5d9554b37..121b3c87609 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmProject.kt @@ -65,8 +65,9 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) { val main: String get() = "$DIST_FOLDER/$name.js" - val externalsDirRoot: File - get() = project.buildDir.resolve("externals").resolve(name) + val externalsDirRoot by lazy { + project.buildDir.resolve("externals").resolve(name) + } val externalsDir: File get() = externalsDirRoot.resolve("src") diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/RequiresNpmDependencies.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/RequiresNpmDependencies.kt index 7eec39179fd..031b1b56da2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/RequiresNpmDependencies.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/RequiresNpmDependencies.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.gradle.targets.js.npm +import org.gradle.api.tasks.Internal import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency @@ -12,4 +13,7 @@ interface RequiresNpmDependencies { val compilation: KotlinJsCompilation val nodeModulesRequired: Boolean val requiredNpmDependencies: Set + + @Internal + fun getPath(): String } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinProjectNpmResolution.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinProjectNpmResolution.kt index 4c28940dcf1..6b4856d4292 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinProjectNpmResolution.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolved/KotlinProjectNpmResolution.kt @@ -5,12 +5,8 @@ package org.jetbrains.kotlin.gradle.targets.js.npm.resolved -import org.gradle.api.Project -import org.gradle.api.file.FileCollection -import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency import org.jetbrains.kotlin.gradle.targets.js.npm.NpmDependency -import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies /** * Info about NPM projects inside particular gradle [project]. @@ -18,7 +14,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies class KotlinProjectNpmResolution( val project: String, val npmProjects: List, - val taskRequirements: Map> + val taskRequirements: Map> ) { val npmProjectsByNpmDependency: Map by lazy { mutableMapOf().also { result -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt index a71c8e7edaf..f8b1d36165a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/resolver/KotlinProjectNpmResolver.kt @@ -40,6 +40,10 @@ internal class KotlinProjectNpmResolver( return byCompilation[compilation.name] ?: error("$compilation was not registered in $this") } + operator fun get(compilationName: String): KotlinCompilationNpmResolver { + return byCompilation[compilationName] ?: error("$compilationName was not registered in $this") + } + private var closed = false val compilationResolvers: Collection @@ -116,7 +120,7 @@ internal class KotlinProjectNpmResolver( return KotlinProjectNpmResolution( projectPath, byCompilation.values.mapNotNull { it.close() }, - resolver.nodeJs.taskRequirements?.byTask + resolver.nodeJs.taskRequirements.byTask ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt index 054c0a7ae0d..015fec9f52d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinPackageJsonTask.kt @@ -41,7 +41,7 @@ open class KotlinPackageJsonTask : DefaultTask() { val projectPath = project.path private val compilationResolver - get() = nodeJs.npmResolutionManager.resolver[projectPath][compilation] + get() = nodeJs.npmResolutionManager.resolver[projectPath][compilationName] private val producer: KotlinCompilationNpmResolver.PackageJsonProducer get() = compilationResolver.packageJsonProducer diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt index aac6d775761..a3a349a404b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/KotlinJsTest.kt @@ -106,7 +106,7 @@ constructor( } fun useMocha() = useMocha {} - fun useMocha(body: KotlinMocha.() -> Unit) = use(KotlinMocha(compilation), body) + fun useMocha(body: KotlinMocha.() -> Unit) = use(KotlinMocha(compilation, path), body) fun useMocha(fn: Closure<*>) { useMocha { ConfigureUtil.configure(fn, this) @@ -115,7 +115,7 @@ constructor( fun useKarma() = useKarma {} fun useKarma(body: KotlinKarma.() -> Unit) = use( - KotlinKarma(compilation, services), + KotlinKarma(compilation, services, path), body ) fun useKarma(fn: Closure<*>) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt index a885c945358..de650c15281 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/karma/KotlinKarma.kt @@ -36,7 +36,7 @@ import org.jetbrains.kotlin.gradle.utils.property import org.slf4j.Logger import java.io.File -class KotlinKarma(override val compilation: KotlinJsCompilation, private val services: ServiceRegistry) : +class KotlinKarma(override val compilation: KotlinJsCompilation, private val services: ServiceRegistry, private val basePath: String) : KotlinJsTestFramework { private val project: Project = compilation.target.project private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) @@ -56,6 +56,8 @@ class KotlinKarma(override val compilation: KotlinJsCompilation, private val ser override val requiredNpmDependencies: Set get() = requiredDependencies + webpackConfig.getRequiredDependencies(versions) + override fun getPath() = "$basePath:kotlinKarma" + override val settingsState: String get() = "KotlinKarma($config)" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt index bd64118cd64..a7ce5bc181e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/testing/mocha/KotlinMocha.kt @@ -21,7 +21,7 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinTestRunnerCliArgs import java.io.File -class KotlinMocha(override val compilation: KotlinJsCompilation) : +class KotlinMocha(override val compilation: KotlinJsCompilation, private val basePath: String) : KotlinJsTestFramework { private val project: Project = compilation.target.project private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) @@ -37,6 +37,8 @@ class KotlinMocha(override val compilation: KotlinJsCompilation) : versions.sourceMapSupport ) + override fun getPath() = "$basePath:kotlinMocha" + // https://mochajs.org/#-timeout-ms-t-ms var timeout: String = DEFAULT_TIMEOUT diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt index b9d50a20f16..63cfef92e24 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/tasks/KotlinJsDce.kt @@ -19,10 +19,7 @@ package org.jetbrains.kotlin.gradle.tasks import org.gradle.api.Project import org.gradle.api.file.FileCollection import org.gradle.api.file.FileTree -import org.gradle.api.tasks.CacheableTask -import org.gradle.api.tasks.Input -import org.gradle.api.tasks.Internal -import org.gradle.api.tasks.TaskAction +import org.gradle.api.tasks.* import org.jetbrains.kotlin.cli.common.arguments.K2JSDceArguments import org.jetbrains.kotlin.cli.js.dce.K2JSDce import org.jetbrains.kotlin.compilerRunner.runToolInSeparateProcess @@ -74,6 +71,10 @@ open class KotlinJsDce : AbstractKotlinCompileTool(), KotlinJs @Input var jvmArgs = mutableListOf() + private val buildDir by lazy { + project.buildDir + } + @TaskAction fun performDce() { val inputFiles = (listOf(source) + classpath @@ -94,7 +95,7 @@ open class KotlinJsDce : AbstractKotlinCompileTool(), KotlinJs K2JSDce::class.java.name, computedCompilerClasspath, log, - project.buildDir, + buildDir, jvmArgs ) throwGradleExceptionIfError(exitCode)