diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt index b2f06b9ac7b..3013c7db042 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTarget.kt @@ -14,16 +14,13 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget 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.KotlinJsTargetDsl -import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinBrowserJs import org.jetbrains.kotlin.gradle.targets.js.subtargets.KotlinNodeJs -import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import org.jetbrains.kotlin.gradle.testing.internal.getAggregatedTestTask import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName class KotlinJsTarget(project: Project, platformType: KotlinPlatformType) : KotlinOnlyTarget(project, platformType), KotlinJsTargetDsl { - val npmResolveTaskHolder = project.locateOrRegisterTask("npmResolve") {} val testTaskName get() = lowerCamelCaseName(disambiguationClassifier, testTaskNameSuffix) val testTask diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt index 73aaddfff49..b46ecdc0fab 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/KotlinJsTargetConfigurator.kt @@ -5,12 +5,12 @@ package org.jetbrains.kotlin.gradle.targets.js -import org.gradle.api.plugins.JavaBasePlugin import org.jetbrains.kotlin.gradle.plugin.Kotlin2JsSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetProcessor import org.jetbrains.kotlin.gradle.plugin.KotlinTargetConfigurator import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget +import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.tasks.KotlinTasksProvider open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) : @@ -22,7 +22,7 @@ open class KotlinJsTargetConfigurator(kotlinPluginVersion: String) : super.configureTarget(target) target.compilations.forEach { - it.compileKotlinTask.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider()) + it.compileKotlinTask.dependsOn(target.project.nodeJs.root.npmResolveTask) } if (target.disambiguationClassifier != null) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt index 48ee4b50625..35aa27dfa41 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExec.kt @@ -6,33 +6,12 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs import org.gradle.api.tasks.AbstractExecTask -import org.gradle.api.tasks.Internal -import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject -import org.jetbrains.kotlin.gradle.tasks.Kotlin2JsCompile -import java.io.File open class NodeJsExec : AbstractExecTask(NodeJsExec::class.java) { - private val npmProject by lazy { project.npmProject } - init { val nodeJs = NodeJsPlugin.apply(project).root - dependsOn(nodeJs.nodeJsSetupTask) + dependsOn(nodeJs.npmResolveTask) executable = nodeJs.environment.nodeExecutable - workingDir = project.npmProject.nodeWorkDir - } - - @Internal - var script: String? = null - - fun require(moduleName: String) { - args("--require", moduleName) - } - - fun script(file: File) { - check(script == null) { - "Script was already set to $script" - } - script = file.canonicalFile.relativeToOrSelf(npmProject.nodeWorkDir).path } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlugin.kt index bcfa125461a..b52a49bc6f7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsPlugin.kt @@ -5,6 +5,7 @@ import org.gradle.api.Project import org.gradle.api.plugins.BasePlugin import org.gradle.api.tasks.Delete import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension.Companion.NODE_JS +import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject open class NodeJsPlugin : Plugin { @@ -14,7 +15,12 @@ open class NodeJsPlugin : Plugin { } this.extensions.create(NODE_JS, NodeJsRootExtension::class.java, this) - tasks.create(NodeJsSetupTask.NAME, NodeJsSetupTask::class.java) + + val setupTask = tasks.create(NodeJsSetupTask.NAME, NodeJsSetupTask::class.java) + val npmResolveTask = tasks.create(NpmResolveTask.NAME, NpmResolveTask::class.java) + npmResolveTask.outputs.upToDateWhen { false } + + npmResolveTask.dependsOn(setupTask) setupCleanNodeModulesTask(project) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt index 73b37c98ec0..3e91afd0978 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootExtension.kt @@ -2,9 +2,12 @@ package org.jetbrains.kotlin.gradle.targets.js.nodejs import org.gradle.api.Project import org.jetbrains.kotlin.gradle.logging.kotlinInfo +import org.jetbrains.kotlin.gradle.plugin.TaskHolder import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProjectLayout import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi +import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolveTask import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn +import org.jetbrains.kotlin.gradle.tasks.locateOrRegisterTask import java.io.File open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) { @@ -26,6 +29,9 @@ open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) { val nodeJsSetupTask: NodeJsSetupTask get() = project.tasks.getByName(NodeJsSetupTask.NAME) as NodeJsSetupTask + val npmResolveTask: NpmResolveTask + get() = project.tasks.getByName(NpmResolveTask.NAME) as NpmResolveTask + internal val environment: NodeJsEnv get() { val platform = NodeJsPlatform.name diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmResolveTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmResolveTask.kt index abd73ca03b2..a3fee4850da 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmResolveTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmResolveTask.kt @@ -13,4 +13,8 @@ open class NpmResolveTask : AbstractTask() { fun resolve() { NpmResolver.resolve(project) } + + companion object { + const val NAME = "npmResolve" + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt index 7adfd383920..3e7da383bdc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinBrowserJs.kt @@ -43,7 +43,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) : project.createOrRegisterTask(disambiguateCamelCased("webpack")) { val compileKotlinTask = compilation.compileKotlinTask - it.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileKotlinTask) + it.dependsOn(target.project.nodeJs.root.npmResolveTask, compileKotlinTask) it.entry = npmProject.compileOutput(compileKotlinTask) @@ -53,7 +53,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) : val run = project.createOrRegisterTask(disambiguateCamelCased("run")) { val compileKotlinTask = compilation.compileKotlinTask it.dependsOn( - target.npmResolveTaskHolder.getTaskOrProvider(), + target.project.nodeJs.root.npmResolveTask, compileKotlinTask, project.getTasksByName(compilation.processResourcesTaskName, false) ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt index 7ec1013e752..7fb29b32a12 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinJsSubTarget.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.gradle.plugin.whenEvaluated import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsSubTargetDsl import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin +import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask import org.jetbrains.kotlin.gradle.testing.internal.configureConventions @@ -65,7 +66,7 @@ abstract class KotlinJsSubTarget( testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP - testJs.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileTask, nodeJs.nodeJsSetupTask) + testJs.dependsOn(target.project.nodeJs.root.npmResolveTask, compileTask, nodeJs.nodeJsSetupTask) testJs.onlyIf { compileTask.outputFile.exists() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt index 99e4a5c2282..5205f1dd7b7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/subtargets/KotlinNodeJs.kt @@ -11,6 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsNodeDsl import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsExec +import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask @@ -32,7 +33,7 @@ class KotlinNodeJs(target: KotlinJsTarget) : val runTaskHolder = project.createOrRegisterTask(disambiguateCamelCased("run")) { runTask -> val compileKotlinTask = compilation.compileKotlinTask - runTask.dependsOn(target.npmResolveTaskHolder.getTaskOrProvider(), compileKotlinTask) + runTask.dependsOn(target.project.nodeJs.root.npmResolveTask, compileKotlinTask) val npmProject = project.npmProject runTask.args(npmProject.compileOutput(compileKotlinTask)) @@ -52,7 +53,7 @@ class KotlinNodeJs(target: KotlinJsTarget) : runtimeOnly(kotlin("test-nodejs-runner")) } - target.npmResolveTaskHolder.doGetTask().doLast { + target.project.nodeJs.root.npmResolveTask.doLast { runTaskHolder.configure { runTask -> runTask.args( "--require", 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 aea097e8c47..4a27597dfbd 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 @@ -12,7 +12,6 @@ import org.gradle.api.tasks.SkipWhenEmpty import org.gradle.process.internal.DefaultProcessForkOptions import org.gradle.util.ConfigureUtil import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec -import org.jetbrains.kotlin.gradle.plugin.HasKotlinDependencies import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.targets.js.npm.NpmResolver diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt index faf718282da..d101e155c9a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/Yarn.kt @@ -6,9 +6,6 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn import org.gradle.api.Project -import org.gradle.api.internal.project.ProjectInternal -import org.gradle.internal.hash.FileHasher -import org.jetbrains.kotlin.daemon.common.toHexString import org.jetbrains.kotlin.gradle.internal.execWithProgress import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.*