[Gradle, JS] Abstractize GradleNodeModulesCache.kt

#KT-32466 fixed
#KT-36784 fixed
#KT-36864 fixed
This commit is contained in:
Ilya Goncharov
2020-03-25 17:53:53 +03:00
parent 77139a3a10
commit be4c301808
2 changed files with 48 additions and 27 deletions
@@ -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()
}
}
@@ -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()
}
}