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 85d89d0419d..c9bd23ad3fb 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 @@ -46,12 +46,11 @@ open class NodeJsExec : AbstractExecTask(NodeJsExec::class.java), Re fun create( compilation: KotlinJsCompilation, name: String, - providedNodeJs: NodeJsRootExtension? = null, configuration: NodeJsExec.() -> Unit = {} ): TaskHolder { val target = compilation.target val project = target.project - val nodeJs = providedNodeJs ?: NodeJsRootPlugin.apply(project).root + val nodeJs = NodeJsRootPlugin.apply(project.rootProject) return project.createOrRegisterTask(name) { it.nodeJs = nodeJs diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExtension.kt index 68df82bd148..b1c85770226 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsExtension.kt @@ -9,23 +9,11 @@ import org.gradle.api.Project import org.jetbrains.kotlin.gradle.targets.js.NpmVersions import org.jetbrains.kotlin.gradle.targets.js.npm.PackageJson -open class NodeJsExtension(val project: Project, root: NodeJsRootExtension?) { - @Suppress("LeakingThis") - val root: NodeJsRootExtension = root ?: this as NodeJsRootExtension - +open class NodeJsExtension(val project: Project) { internal val packageJsonHandlers = mutableListOf Unit>() - val versions = NpmVersions() - @Suppress("unused") fun packageJson(handler: PackageJson.() -> Unit) { packageJsonHandlers.add(handler) } -} - -val Project.nodeJs: NodeJsExtension - get() { - val project = this - project.plugins.apply(NodeJsPlugin::class.java) - return project.extensions.getByName(NodeJsRootExtension.EXTENSION_NAME) as NodeJsExtension - } \ No newline at end of file +} \ 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 91870b67b09..94f73caaea5 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 @@ -10,12 +10,19 @@ import org.gradle.api.Project class NodeJsPlugin : Plugin { override fun apply(target: Project) { - val root = NodeJsRootPlugin.apply(target.rootProject) as NodeJsRootExtension + val root = NodeJsRootPlugin.apply(target.rootProject) if (target != target.rootProject) { - target.extensions.create(NodeJsRootExtension.EXTENSION_NAME, NodeJsExtension::class.java, target, root) + target.extensions.create(NodeJsRootExtension.EXTENSION_NAME, NodeJsExtension::class.java, target) } root.requireResolver().addProject(target) } + + companion object { + fun apply(project: Project): NodeJsExtension { + project.plugins.apply(NodeJsPlugin::class.java) + return project.extensions.getByName(NodeJsRootExtension.EXTENSION_NAME) as NodeJsExtension + } + } } \ No newline at end of file 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 6ef8fd3fc50..e5ecd4da49f 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 @@ -3,6 +3,7 @@ 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.mpp.KotlinJsCompilation +import org.jetbrains.kotlin.gradle.targets.js.NpmVersions import org.jetbrains.kotlin.gradle.targets.js.npm.NpmApi import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinRootNpmResolution @@ -12,7 +13,7 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinNpmInstallTask import org.jetbrains.kotlin.gradle.targets.js.yarn.Yarn import java.io.File -open class NodeJsRootExtension(project: Project) : NodeJsExtension(project, null) { +open class NodeJsRootExtension(project: Project) : NodeJsExtension(project) { init { check(project.rootProject == project) } @@ -84,6 +85,8 @@ open class NodeJsRootExtension(project: Project) : NodeJsExtension(project, null } } + val versions = NpmVersions() + internal val resolutionState: ResolutionState get() = _resolutionState diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt index eea36bb209b..560a3486947 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsRootPlugin.kt @@ -15,7 +15,7 @@ open class NodeJsRootPlugin : Plugin { "NodeJsRootPlugin can be applied only to root project" } - val root = this.extensions.create(EXTENSION_NAME, NodeJsRootExtension::class.java, this) + this.extensions.create(EXTENSION_NAME, NodeJsRootExtension::class.java, this) val setupTask = tasks.create(NodeJsSetupTask.NAME, NodeJsSetupTask::class.java) { it.group = TASKS_GROUP_NAME @@ -32,10 +32,10 @@ open class NodeJsRootPlugin : Plugin { companion object { const val TASKS_GROUP_NAME: String = "nodeJs" - fun apply(project: Project): NodeJsExtension { - val rootProject = project.rootProject + fun apply(rootProject: Project): NodeJsRootExtension { + check(rootProject == rootProject.rootProject) rootProject.plugins.apply(NodeJsRootPlugin::class.java) - return rootProject.extensions.getByName(EXTENSION_NAME) as NodeJsExtension + return rootProject.extensions.getByName(EXTENSION_NAME) as NodeJsRootExtension } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt index 4b39b4206fb..0e57841b797 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/nodejs/NodeJsSetupTask.kt @@ -11,7 +11,7 @@ import java.io.File import java.net.URI open class NodeJsSetupTask : DefaultTask() { - private val settings get() = project.nodeJs.root + private val settings get() = NodeJsRootPlugin.apply(project.rootProject) private val env by lazy { settings.environment } val ivyDependency: String diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModulesCache.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModulesCache.kt index eaf27776191..d7c7e5b7581 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModulesCache.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/GradleNodeModulesCache.kt @@ -21,7 +21,7 @@ internal class GradleNodeModulesCache(val nodeJs: NodeJsRootExtension) : AutoClo } val project: Project get() = nodeJs.project - internal val dir = nodeJs.root.nodeModulesGradleCacheDir + internal val dir = nodeJs.nodeModulesGradleCacheDir private val cache = ProcessedFilesCache(project, dir, STATE_FILE_NAME, "9") @Synchronized diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt index ee002ac8cb1..ddc4b0c5250 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmDependency.kt @@ -16,10 +16,9 @@ import org.gradle.api.internal.artifacts.dependencies.SelfResolvingDependencyInt import org.gradle.api.tasks.TaskDependency import org.gradle.internal.component.local.model.DefaultLibraryBinaryIdentifier import org.jetbrains.kotlin.gradle.internal.isInIdeaSync -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs -import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution -import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinRootNpmResolver +import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinProjectNpmResolution +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import java.io.File data class NpmDependency( @@ -85,7 +84,7 @@ data class NpmDependency( } private fun resolveProject(): KotlinCompilationNpmResolution? { - val nodeJs = project.nodeJs.root + val nodeJs = NodeJsRootPlugin.apply(project.rootProject) val resolvedProject = if (isInIdeaSync) nodeJs.resolveIfNeeded(project) 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 eb09a599b1d..f2a772c3256 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 @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.disambiguateName -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask import java.io.File @@ -29,7 +29,7 @@ open class NpmProject(val compilation: KotlinJsCompilation) { get() = buildNpmProjectName() val nodeJs - get() = project.nodeJs.root + get() = NodeJsRootPlugin.apply(project.rootProject) val dir: File get() = nodeJs.projectPackagesDir.resolve(name) diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmSimpleLinker.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmSimpleLinker.kt index 1ff867052a2..e207a78f594 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmSimpleLinker.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/NpmSimpleLinker.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.gradle.targets.js.npm import com.google.gson.stream.JsonWriter import org.gradle.api.Project import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution import java.io.ByteArrayInputStream import java.io.File diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt index c29e6756448..0f1558c5564 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/KotlinNpmInstallTask.kt @@ -9,9 +9,8 @@ import org.gradle.api.DefaultTask import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.OutputFile import org.gradle.api.tasks.TaskAction -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject -import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinRootNpmResolver import java.io.File open class KotlinNpmInstallTask : DefaultTask() { @@ -19,18 +18,20 @@ open class KotlinNpmInstallTask : DefaultTask() { check(project == project.rootProject) } + private val nodeJs get() = NodeJsRootPlugin.apply(project.rootProject) + @Suppress("unused") @get:InputFiles val packageJsonFiles: Collection - get() = project.nodeJs.root.resolutionState.compilations.map { it.npmProject.packageJsonFile } + get() = nodeJs.resolutionState.compilations.map { it.npmProject.packageJsonFile } @get:OutputFile val yarnLock: File - get() = project.nodeJs.root.rootPackageDir.resolve("yarn.lock") + get() = nodeJs.rootPackageDir.resolve("yarn.lock") @TaskAction fun resolve() { - project.nodeJs.root.resolveIfNeeded(project) + nodeJs.resolveIfNeeded(project) } companion object { 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 7cd5dbf7619..6a7e50c70c2 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 @@ -15,7 +15,6 @@ import org.jetbrains.kotlin.gradle.plugin.TaskHolder import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin -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.npm.resolver.KotlinCompilationNpmResolver import org.jetbrains.kotlin.gradle.tasks.createOrRegisterTask @@ -41,7 +40,7 @@ open class KotlinPackageJsonTask : DefaultTask() { val target = compilation.target val project = target.project val npmProject = compilation.npmProject - val nodeJs = project.nodeJs.root + val nodeJs = NodeJsRootPlugin.apply(project.rootProject) val rootClean = project.rootProject.tasks.getByName(BasePlugin.CLEAN_TASK_NAME) val npmInstallTask = nodeJs.npmInstallTask @@ -53,7 +52,7 @@ open class KotlinPackageJsonTask : DefaultTask() { task.group = NodeJsRootPlugin.TASKS_GROUP_NAME @Suppress("UnstableApiUsage") - task.dependsOn(target.project.provider{ task.findDependentTasks() }) + task.dependsOn(target.project.provider { task.findDependentTasks() }) task.mustRunAfter(rootClean) } 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 1400b6fb766..8a11fbd9fdc 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 @@ -9,7 +9,7 @@ import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.KotlinJsTarget import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpack import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfigWriter @@ -40,11 +40,12 @@ class KotlinBrowserJs(target: KotlinJsTarget) : override fun configureRun(compilation: KotlinJsCompilation) { val project = compilation.target.project + val nodeJs = NodeJsRootPlugin.apply(project.rootProject) project.createOrRegisterTask(disambiguateCamelCased("webpack")) { val compileKotlinTask = compilation.compileKotlinTask it.dependsOn( - target.project.nodeJs.root.npmInstallTask, + nodeJs.npmInstallTask, compileKotlinTask ) @@ -57,7 +58,7 @@ class KotlinBrowserJs(target: KotlinJsTarget) : val run = project.createOrRegisterTask(disambiguateCamelCased("run")) { val compileKotlinTask = compilation.compileKotlinTask it.dependsOn( - target.project.nodeJs.root.npmInstallTask, + nodeJs.npmInstallTask, compileKotlinTask, target.project.tasks.getByName(compilation.processResourcesTaskName) ) 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 129d7b27f4b..a77eddf17e8 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 @@ -11,8 +11,8 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation 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.NodeJsRootPlugin -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 @@ -25,12 +25,13 @@ abstract class KotlinJsSubTarget( private val disambiguationClassifier: String ) : KotlinJsSubTargetDsl { val project get() = target.project + private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) val runTaskName = disambiguateCamelCased("run") val testTaskName = disambiguateCamelCased("test") fun configure() { - project.nodeJs + NodeJsPlugin.apply(project) configureTests() configureRun() @@ -67,16 +68,13 @@ abstract class KotlinJsSubTarget( abstract val testTaskDescription: String private fun configureTests(compilation: KotlinJsCompilation) { - // apply plugin (cannot be done at task instantiation time) - val nodeJs = NodeJsRootPlugin.apply(target.project).root - val testJs = project.createOrRegisterTask(testTaskName) { testJs -> val compileTask = compilation.compileKotlinTask testJs.group = LifecycleBasePlugin.VERIFICATION_GROUP testJs.description = testTaskDescription - testJs.dependsOn(target.project.nodeJs.root.npmInstallTask, compileTask, nodeJs.nodeJsSetupTask) + testJs.dependsOn(nodeJs.npmInstallTask, 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 9bd5b507169..3b70565a1e2 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 @@ -5,15 +5,11 @@ package org.jetbrains.kotlin.gradle.targets.js.subtargets -import org.jetbrains.kotlin.gradle.plugin.TaskHolder 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 class KotlinNodeJs(target: KotlinJsTarget) : KotlinJsSubTarget(target, "node"), 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 64047d94ace..405666cef9c 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 @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecuti import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.karma.KotlinKarma @@ -23,6 +22,8 @@ import org.jetbrains.kotlin.gradle.targets.js.testing.nodejs.KotlinNodeJsTestRun import org.jetbrains.kotlin.gradle.tasks.KotlinTest open class KotlinJsTest : KotlinTest(), RequiresNpmDependencies { + private val nodeJs get() = NodeJsRootPlugin.apply(project.rootProject) + @get:Internal internal var testFramework: KotlinJsTestFramework? = null @@ -92,14 +93,14 @@ open class KotlinJsTest : KotlinTest(), RequiresNpmDependencies { } override fun executeTests() { - project.nodeJs.root.checkRequiredDependencies(project, this) + nodeJs.checkRequiredDependencies(project, this) super.executeTests() } override fun createTestExecutionSpec(): TCServiceMessagesTestExecutionSpec { val forkOptions = DefaultProcessForkOptions(fileResolver) forkOptions.workingDir = compilation.npmProject.dir - forkOptions.executable = NodeJsRootPlugin.apply(project).root.environment.nodeExecutable + forkOptions.executable = nodeJs.environment.nodeExecutable val nodeJsArgs = mutableListOf() 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 16cffe88e46..6842593d957 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 @@ -18,9 +18,9 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecuti import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.appendConfigsFromDir import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework @@ -31,13 +31,13 @@ import org.slf4j.Logger import java.io.File class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestFramework { - val project: Project - get() = compilation.target.project + private val project: Project = compilation.target.project + private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) + private val versions = nodeJs.versions private val config: KarmaConfig = KarmaConfig() private val requiredDependencies = mutableSetOf() - private val versions = project.nodeJs.versions private val configurators = mutableListOf<(KotlinJsTest) -> Unit>() private val confJsWriters = mutableListOf<(Appendable) -> Unit>() private var sourceMaps = false @@ -119,7 +119,7 @@ class KotlinKarma(override val compilation: KotlinJsCompilation) : KotlinJsTestF sourceMaps = true, export = false, progressReporter = true, - progressReporterPathFilter = project.nodeJs.root.rootPackageDir.absolutePath + progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath ).appendTo(it) it.appendln(" return 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 327bce629dd..283ac150708 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 @@ -11,18 +11,17 @@ import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesClientSetti import org.jetbrains.kotlin.gradle.internal.testing.TCServiceMessagesTestExecutionSpec import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation import org.jetbrains.kotlin.gradle.targets.js.internal.parseNodeJsStackTraceAsJvm -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.targets.js.KotlinGradleNpmPackage import org.jetbrains.kotlin.gradle.targets.js.RequiredKotlinJsDependency +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTest import org.jetbrains.kotlin.gradle.targets.js.testing.KotlinJsTestFramework class KotlinMocha(override val compilation: KotlinJsCompilation) : KotlinJsTestFramework { - val project: Project - get() = compilation.target.project - - private val versions = project.nodeJs.versions + private val project: Project = compilation.target.project + private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) + private val versions = nodeJs.versions override val settingsState: String get() = "mocha" diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt index 32b9bfe1b68..74da3ef6058 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/webpack/KotlinWebpack.kt @@ -15,8 +15,8 @@ import org.gradle.deployment.internal.DeploymentRegistry import org.gradle.process.internal.ExecHandle import org.gradle.process.internal.ExecHandleFactory import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJsCompilation -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs import org.jetbrains.kotlin.gradle.targets.js.NpmPackageVersion +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.RequiresNpmDependencies import org.jetbrains.kotlin.gradle.targets.js.npm.npmProject import org.jetbrains.kotlin.gradle.testing.internal.reportsDir @@ -25,7 +25,8 @@ import java.io.File import javax.inject.Inject open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { - private val versions by lazy { project.nodeJs.versions } + private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) + private val versions = nodeJs.versions @get:Inject open val fileResolver: FileResolver @@ -126,7 +127,7 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { @TaskAction fun doExecute() { - project.nodeJs.root.checkRequiredDependencies(project, this) + nodeJs.checkRequiredDependencies(project, this) val runner = createRunner() @@ -142,7 +143,7 @@ open class KotlinWebpack : DefaultTask(), RequiresNpmDependencies { runner.copy( configWriter = runner.configWriter.copy( progressReporter = true, - progressReporterPathFilter = project.nodeJs.root.rootPackageDir.absolutePath + progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath ) ).execute() } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt index f0d5b02f6c4..e4489d6bbd2 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnBasics.kt @@ -23,7 +23,8 @@ abstract class YarnBasics : NpmApi { description: String, vararg args: String ) { - val nodeJsEnv = NodeJsRootPlugin.apply(project).root.environment + val nodeJs = NodeJsRootPlugin.apply(project) + val nodeJsEnv = nodeJs.environment val yarnEnv = YarnPlugin.apply(project).environment project.execWithProgress(description) { exec -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt index fe06628ee66..67650ffd78d 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnPlugin.kt @@ -15,7 +15,7 @@ open class YarnPlugin : Plugin { "YarnPlugin can be applied only to root project" } - val nodeJs = NodeJsRootPlugin.apply(this).root + val nodeJs = NodeJsRootPlugin.apply(this) this.extensions.create(YarnRootExtension.YARN, YarnRootExtension::class.java, this) tasks.create(YarnSetupTask.NAME, YarnSetupTask::class.java) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt index 4d02f485868..34e308c3af8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnRootExtension.kt @@ -10,6 +10,10 @@ import org.jetbrains.kotlin.gradle.logging.kotlinInfo import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin open class YarnRootExtension(val project: Project) { + init { + check(project == project.rootProject) + } + private val gradleHome = project.gradle.gradleUserHomeDir.also { project.logger.kotlinInfo("Storing cached files in $it") } @@ -28,7 +32,7 @@ open class YarnRootExtension(val project: Project) { get() = !disableWorkspaces internal fun executeSetup() { - NodeJsRootPlugin.apply(project).root.executeSetup() + NodeJsRootPlugin.apply(project).executeSetup() val env = environment if (!env.home.isDirectory) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt index 8d76fb5b671..e9b55249be7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/yarn/YarnWorkspaces.kt @@ -6,7 +6,7 @@ package org.jetbrains.kotlin.gradle.targets.js.yarn import org.gradle.api.Project -import org.jetbrains.kotlin.gradle.targets.js.nodejs.nodeJs +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin import org.jetbrains.kotlin.gradle.targets.js.npm.* import org.jetbrains.kotlin.gradle.targets.js.npm.resolved.KotlinCompilationNpmResolution import java.io.File @@ -30,7 +30,7 @@ object YarnWorkspaces : YarnBasics() { if (upToDateChecks.all { it.upToDate }) return - val nodeJsWorldDir = rootProject.nodeJs.root.rootPackageDir + val nodeJsWorldDir = NodeJsRootPlugin.apply(rootProject).rootPackageDir saveRootProjectWorkspacesPackageJson(rootProject, npmProjects, nodeJsWorldDir) @@ -55,7 +55,8 @@ object YarnWorkspaces : YarnBasics() { rootPackageJson.workspaces = npmProjectWorkspaces + importedProjectWorkspaces - rootProject.nodeJs.packageJsonHandlers.forEach { + val nodeJs = NodeJsRootPlugin.apply(rootProject) + nodeJs.packageJsonHandlers.forEach { it(rootPackageJson) }