From be4c3018082bfcb5144e5666f122af652b587620 Mon Sep 17 00:00:00 2001 From: Ilya Goncharov Date: Wed, 25 Mar 2020 17:53:53 +0300 Subject: [PATCH] [Gradle, JS] Abstractize GradleNodeModulesCache.kt #KT-32466 fixed #KT-36784 fixed #KT-36864 fixed --- .../js/npm/AbstractNodeModulesCache.kt | 46 +++++++++++++++++++ .../targets/js/npm/GradleNodeModulesCache.kt | 29 +----------- 2 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt new file mode 100644 index 00000000000..ceff3b302a2 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/js/npm/AbstractNodeModulesCache.kt @@ -0,0 +1,46 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license + * that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.gradle.targets.js.npm + +import org.gradle.api.Project +import org.gradle.api.artifacts.ResolvedArtifact +import org.gradle.api.artifacts.ResolvedDependency +import org.jetbrains.kotlin.gradle.internal.ProcessedFilesCache +import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension +import java.io.File + +/** + * Cache for storing already created [GradleNodeModule]s + */ +internal abstract class AbstractNodeModulesCache(val nodeJs: NodeJsRootExtension) : AutoCloseable { + companion object { + const val STATE_FILE_NAME = ".visited" + } + + val project: Project get() = nodeJs.rootProject + internal val dir = nodeJs.nodeModulesGradleCacheDir + private val cache = ProcessedFilesCache(project, dir, STATE_FILE_NAME, "9") + + @Synchronized + fun get( + dependency: ResolvedDependency, + artifact: ResolvedArtifact + ): GradleNodeModule? = cache.getOrCompute(artifact.file) { + buildImportedPackage(dependency, artifact) + }?.let { + GradleNodeModule(it) + } + + abstract fun buildImportedPackage( + dependency: ResolvedDependency, + artifact: ResolvedArtifact + ): File? + + @Synchronized + override fun close() { + cache.close() + } +} \ No newline at end of file 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 07daf453c14..122316ac02a 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 @@ -5,36 +5,16 @@ package org.jetbrains.kotlin.gradle.targets.js.npm -import org.gradle.api.Project import org.gradle.api.artifacts.ResolvedArtifact import org.gradle.api.artifacts.ResolvedDependency -import org.jetbrains.kotlin.gradle.internal.ProcessedFilesCache import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension import java.io.File /** * Cache for storing already created [GradleNodeModule]s */ -internal class GradleNodeModulesCache(val nodeJs: NodeJsRootExtension) : AutoCloseable { - companion object { - const val STATE_FILE_NAME = ".visited" - } - - val project: Project get() = nodeJs.rootProject - internal val dir = nodeJs.nodeModulesGradleCacheDir - private val cache = ProcessedFilesCache(project, dir, STATE_FILE_NAME, "9") - - @Synchronized - fun get( - dependency: ResolvedDependency, - artifact: ResolvedArtifact - ): GradleNodeModule? = cache.getOrCompute(artifact.file) { - buildImportedPackage(dependency, artifact) - }?.let { - GradleNodeModule(it) - } - - private fun buildImportedPackage( +internal class GradleNodeModulesCache(nodeJs: NodeJsRootExtension) : AbstractNodeModulesCache(nodeJs) { + override fun buildImportedPackage( dependency: ResolvedDependency, artifact: ResolvedArtifact ): File? { @@ -42,9 +22,4 @@ internal class GradleNodeModulesCache(val nodeJs: NodeJsRootExtension) : AutoClo module.visitArtifacts() return module.rebuild() } - - @Synchronized - override fun close() { - cache.close() - } } \ No newline at end of file