[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
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user