[Gradle, JS] Abstractize GradleNodeModulesCache.kt
#KT-32466 fixed #KT-36784 fixed #KT-36864 fixed
This commit is contained in:
+46
@@ -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()
|
||||||
|
}
|
||||||
|
}
|
||||||
+2
-27
@@ -5,36 +5,16 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.gradle.targets.js.npm
|
package org.jetbrains.kotlin.gradle.targets.js.npm
|
||||||
|
|
||||||
import org.gradle.api.Project
|
|
||||||
import org.gradle.api.artifacts.ResolvedArtifact
|
import org.gradle.api.artifacts.ResolvedArtifact
|
||||||
import org.gradle.api.artifacts.ResolvedDependency
|
import org.gradle.api.artifacts.ResolvedDependency
|
||||||
import org.jetbrains.kotlin.gradle.internal.ProcessedFilesCache
|
|
||||||
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Cache for storing already created [GradleNodeModule]s
|
* Cache for storing already created [GradleNodeModule]s
|
||||||
*/
|
*/
|
||||||
internal class GradleNodeModulesCache(val nodeJs: NodeJsRootExtension) : AutoCloseable {
|
internal class GradleNodeModulesCache(nodeJs: NodeJsRootExtension) : AbstractNodeModulesCache(nodeJs) {
|
||||||
companion object {
|
override fun buildImportedPackage(
|
||||||
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(
|
|
||||||
dependency: ResolvedDependency,
|
dependency: ResolvedDependency,
|
||||||
artifact: ResolvedArtifact
|
artifact: ResolvedArtifact
|
||||||
): File? {
|
): File? {
|
||||||
@@ -42,9 +22,4 @@ internal class GradleNodeModulesCache(val nodeJs: NodeJsRootExtension) : AutoClo
|
|||||||
module.visitArtifacts()
|
module.visitArtifacts()
|
||||||
return module.rebuild()
|
return module.rebuild()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Synchronized
|
|
||||||
override fun close() {
|
|
||||||
cache.close()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user