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 adb30740533..be04c1459d4 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 @@ -107,7 +107,7 @@ internal class DukatCompilationResolverPlugin( } DukatExecutor( - nodeJs, + nodeJs.versions, DtsResolver(npmProject).getAllDts(externalNpmDependencies), externalsOutputFormat, npmProject, 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 d3ab9381a63..cbfbfc0faed 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 @@ -6,11 +6,11 @@ package org.jetbrains.kotlin.gradle.targets.js.dukat import org.gradle.internal.service.ServiceRegistry -import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension +import org.jetbrains.kotlin.gradle.targets.js.NpmVersions import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject class DukatExecutor( - val nodeJs: NodeJsRootExtension, + val npmVersions: NpmVersions, val typeDefinitions: List, val externalsOutputFormat: ExternalsOutputFormat, val npmProject: NpmProject, @@ -23,7 +23,7 @@ class DukatExecutor( } val versionFile = npmProject.externalsDirRoot.resolve("version.txt") - val version = DukatCompilationResolverPlugin.VERSION + ", " + nodeJs.versions.dukat.version + val version = DukatCompilationResolverPlugin.VERSION + ", " + npmVersions.dukat.version val prevVersion = if (versionFile.exists()) versionFile.readText() else null val inputsFile = npmProject.externalsDirRoot.resolve("inputs.txt") 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 e24f3fb4b40..7508157c168 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,8 +19,11 @@ abstract class DukatTask( override val compilation: KotlinJsCompilation ) : DefaultTask(), RequiresNpmDependencies { @get:Internal + @Transient protected val nodeJs = NodeJsRootPlugin.apply(project.rootProject) + private val resolutionManager = nodeJs.npmResolutionManager + @get:Internal val compilationName by lazy { compilation.disambiguatedName @@ -31,8 +34,9 @@ abstract class DukatTask( get() = true @get:Internal - override val requiredNpmDependencies: Set - get() = setOf(nodeJs.versions.dukat) + override val requiredNpmDependencies: Set by lazy { + setOf(nodeJs.versions.dukat) + } /** * [ExternalsOutputFormat] what to generate, sources or binaries @@ -43,11 +47,10 @@ abstract class DukatTask( private val projectPath = project.path private val compilationResolution - get() = - nodeJs.npmResolutionManager.requireInstalled( - services, - logger - )[projectPath][compilationName] + get() = resolutionManager.requireInstalled( + services, + logger + )[projectPath][compilationName] @get:Internal val dts: List @@ -91,7 +94,7 @@ abstract class DukatTask( @TaskAction open fun run() { - nodeJs.npmResolutionManager.checkRequiredDependencies(this, services, logger, projectPath) + resolutionManager.checkRequiredDependencies(this, services, logger, projectPath) destinationDir.deleteRecursively() 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 d2a43c09ab0..e82c4077a1e 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 @@ -22,6 +22,10 @@ constructor( private val npmProject = compilation.npmProject + private val versions by lazy { + nodeJs.versions + } + @get:OutputDirectory override val destinationDir: File by lazy { npmProject.externalsDir @@ -29,7 +33,7 @@ constructor( private val executor get() = DukatExecutor( - nodeJs, + versions, dts, externalsOutputFormat, npmProject, 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 bafa4f52469..af8da8e9641 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 @@ -21,6 +21,7 @@ constructor( @Internal override val compilation: KotlinJsCompilation ) : AbstractExecTask(NodeJsExec::class.java), RequiresNpmDependencies { + @Transient @get:Internal lateinit var nodeJs: NodeJsRootExtension @@ -48,12 +49,13 @@ constructor( get() = true @get:Internal - override val requiredNpmDependencies: Set - get() = mutableSetOf().also { + override val requiredNpmDependencies: Set by lazy { + mutableSetOf().also { if (sourceMapStackTraces) { it.add(nodeJs.versions.sourceMapSupport) } } + } override fun exec() { val newArgs = mutableListOf() 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 dfef4441c04..df4c26eea0c 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 @@ -14,10 +14,12 @@ import java.net.URI @CacheableTask open class NodeJsSetupTask : DefaultTask() { + @Transient private val settings = NodeJsRootPlugin.apply(project.rootProject) private val env by lazy { settings.requireConfigured() } private val fs = FileSystemOperationsCompat(project) private val archiveOperations = ArchiveOperationsCompat(project) + private val shouldDownload = settings.download val ivyDependency: String @Input get() = env.ivyDependency @@ -63,7 +65,7 @@ open class NodeJsSetupTask : DefaultTask() { init { @Suppress("LeakingThis") onlyIf { - settings.download && !File(env.nodeExecutable).isFile + shouldDownload && !File(env.nodeExecutable).isFile } } 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 708960b130c..ac66e7af6f2 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 @@ -31,12 +31,12 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) { buildNpmProjectName() } - val nodeJs by lazy { - NodeJsRootPlugin.apply(project.rootProject) - } + @Transient + val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - val dir: File - get() = nodeJs.projectPackagesDir.resolve(name) + val dir: File by lazy { + nodeJs.projectPackagesDir.resolve(name) + } val target: KotlinJsTargetDsl get() = compilation.target as KotlinJsTargetDsl @@ -77,8 +77,9 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) { internal val modules = NpmProjectModules(dir) - private val rootNodeModules: NpmProjectModules? - get() = NpmProjectModules(nodeJs.rootPackageDir) + private val nodeExecutable by lazy { + nodeJs.requireConfigured().nodeExecutable + } fun useTool( exec: ExecSpec, @@ -87,7 +88,7 @@ open class NpmProject(@Transient val compilation: KotlinJsCompilation) { args: List ) { exec.workingDir = dir - exec.executable = nodeJs.requireConfigured().nodeExecutable + exec.executable = nodeExecutable exec.args = nodeArgs + require(tool) + args } diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt index 3a6c97b1b5f..1eded8ae030 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/PublicPackageJsonTask.kt @@ -24,16 +24,19 @@ constructor( private val compilation: KotlinJsCompilation ) : DefaultTask() { private val npmProject = compilation.npmProject + + @Transient private val nodeJs = npmProject.nodeJs + private val resolutionManager = nodeJs.npmResolutionManager private val compilationName = compilation.disambiguatedName private val projectPath = project.path private val compilationResolution - get() = nodeJs.npmResolutionManager.requireInstalled( - services, - logger - )[projectPath][compilationName] + get() = resolutionManager.requireInstalled( + services, + logger + )[projectPath][compilationName] private val packageJsonHandlers = compilation.packageJsonHandlers 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 b3214b63745..527bbaec5b0 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 @@ -26,8 +26,9 @@ open class KotlinNpmInstallTask : DefaultTask() { } } + @Transient private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - private val resolutionManager get() = nodeJs.npmResolutionManager + private val resolutionManager = nodeJs.npmResolutionManager @Input val args: MutableList = mutableListOf() @@ -47,12 +48,14 @@ open class KotlinNpmInstallTask : DefaultTask() { // avoid using node_modules as output directory, as it is significantly slows down build @get:OutputFile - val nodeModulesState: File - get() = nodeJs.rootNodeModulesStateFile + val nodeModulesState: File by lazy { + nodeJs.rootNodeModulesStateFile + } @get:OutputFile - val yarnLock: File - get() = nodeJs.rootPackageDir.resolve("yarn.lock") + val yarnLock: File by lazy { + nodeJs.rootPackageDir.resolve("yarn.lock") + } @TaskAction fun resolve() { 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 2e90802f755..d55f2abd36b 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 @@ -18,18 +18,22 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.KotlinCompilationNpmR import org.jetbrains.kotlin.gradle.targets.js.npm.resolver.PACKAGE_JSON_UMBRELLA_TASK_NAME import org.jetbrains.kotlin.gradle.tasks.dependsOn import org.jetbrains.kotlin.gradle.tasks.registerTask +import org.jetbrains.kotlin.gradle.utils.getValue import java.io.File open class KotlinPackageJsonTask : DefaultTask() { init { onlyIf { - nodeJs.npmResolutionManager.isConfiguringState() + npmResolutionManager.isConfiguringState() } } + @Transient private lateinit var nodeJs: NodeJsRootExtension + private val npmResolutionManager by project.provider { nodeJs.npmResolutionManager } + @Transient private lateinit var compilation: KotlinJsCompilation @@ -41,7 +45,7 @@ open class KotlinPackageJsonTask : DefaultTask() { val projectPath = project.path private val compilationResolver - get() = nodeJs.npmResolutionManager.resolver[projectPath][compilationDisambiguatedName] + get() = npmResolutionManager.resolver[projectPath][compilationDisambiguatedName] 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/npm/tasks/RootPackageJsonTask.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/RootPackageJsonTask.kt index 7da9c63954a..c7ca35c83f5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/RootPackageJsonTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/tasks/RootPackageJsonTask.kt @@ -25,12 +25,14 @@ open class RootPackageJsonTask : DefaultTask() { } } + @Transient private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - private val resolutionManager get() = nodeJs.npmResolutionManager + private val resolutionManager = nodeJs.npmResolutionManager @get:OutputFile - val rootPackageJson: File - get() = nodeJs.rootPackageDir.resolve(NpmProject.PACKAGE_JSON) + val rootPackageJson: File by lazy { + nodeJs.rootPackageDir.resolve(NpmProject.PACKAGE_JSON) + } @TaskAction fun resolve() { 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 7d79e1c613d..af02239b945 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 @@ -49,7 +49,9 @@ class KotlinKarma( @Transient private val project: Project = compilation.target.project private val npmProject = compilation.npmProject + @Transient private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) + private val nodeRootPackageDir by lazy { nodeJs.rootPackageDir } private val versions = nodeJs.versions private val config: KarmaConfig = KarmaConfig() @@ -87,7 +89,7 @@ class KotlinKarma( devtool = null, export = false, progressReporter = true, - progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath, + progressReporterPathFilter = nodeRootPackageDir.absolutePath, webpackMajorVersion = webpackMajorVersion ) 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 b762e1bc2b7..afddea953eb 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 @@ -27,8 +27,7 @@ class KotlinMocha(@Transient override val compilation: KotlinJsCompilation, priv @Transient private val project: Project = compilation.target.project private val npmProject = compilation.npmProject - private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) - private val versions = nodeJs.versions + private val versions = NodeJsRootPlugin.apply(project.rootProject).versions private val isTeamCity by lazy { if (isConfigurationCacheAvailable(project.gradle)) { project.providers.gradleProperty(TC_PROJECT_PROPERTY).forUseAtConfigurationTime().isPresent 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 4a3a0c5645d..73b130f95e2 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 @@ -39,8 +39,11 @@ constructor( @Transient override val compilation: KotlinJsCompilation ) : DefaultTask(), RequiresNpmDependencies { + @Transient private val nodeJs = NodeJsRootPlugin.apply(project.rootProject) private val versions = nodeJs.versions + private val resolutionManager = nodeJs.npmResolutionManager + private val rootPackageDir by lazy { nodeJs.rootPackageDir } private val npmProject = compilation.npmProject @@ -260,7 +263,7 @@ constructor( @TaskAction fun doExecute() { - nodeJs.npmResolutionManager.checkRequiredDependencies(task = this, services = services, logger = logger, projectPath = projectPath) + resolutionManager.checkRequiredDependencies(task = this, services = services, logger = logger, projectPath = projectPath) val runner = createRunner() @@ -279,7 +282,7 @@ constructor( runner.copy( config = runner.config.copy( progressReporter = true, - progressReporterPathFilter = nodeJs.rootPackageDir.absolutePath + progressReporterPathFilter = rootPackageDir.absolutePath ) ).execute(services) }