mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-16 14:23:28 +07:00
[kotlin] fix gist instantiating for GradleBuildRootDataSerializer
GitOrigin-RevId: ee0ad4e3be2346879d56ac706d3e41c8e43b0e87
This commit is contained in:
committed by
intellij-monorepo-bot
parent
b4e950e883
commit
5684d033e0
@@ -2,6 +2,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.idea.gradleJava.scripting.roots
|
||||
|
||||
import com.intellij.openapi.components.Service
|
||||
import com.intellij.openapi.components.service
|
||||
import com.intellij.openapi.util.IntellijInternalApi
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.util.gist.storage.GistStorage
|
||||
@@ -17,20 +19,22 @@ import java.io.DataOutput
|
||||
private const val BINARY_FORMAT_VERSION = 1
|
||||
private const val NO_TRACK_GIST_STAMP = 0
|
||||
|
||||
internal object GradleBuildRootDataSerializer {
|
||||
@Service(Service.Level.APP)
|
||||
class GradleBuildRootDataSerializer {
|
||||
|
||||
private val currentBuildRoot: ThreadLocal<VirtualFile> = ThreadLocal()
|
||||
|
||||
private fun newGist() = GistStorage.getInstance().newGist("GradleBuildRootData", BINARY_FORMAT_VERSION, Externalizer)
|
||||
private val buildRootDataGist =
|
||||
GistStorage.getInstance().newGist("GradleBuildRootData", BINARY_FORMAT_VERSION, Externalizer())
|
||||
|
||||
fun read(buildRoot: VirtualFile): GradleBuildRootData? {
|
||||
currentBuildRoot.set(buildRoot)
|
||||
return newGist().getGlobalData(buildRoot, NO_TRACK_GIST_STAMP).data()
|
||||
return buildRootDataGist.getGlobalData(buildRoot, NO_TRACK_GIST_STAMP).data()
|
||||
}
|
||||
|
||||
fun write(buildRoot: VirtualFile, data: GradleBuildRootData?) {
|
||||
currentBuildRoot.set(buildRoot) // putGlobalData calls Externalizer.read
|
||||
newGist().putGlobalData(buildRoot, data, NO_TRACK_GIST_STAMP)
|
||||
buildRootDataGist.putGlobalData(buildRoot, data, NO_TRACK_GIST_STAMP)
|
||||
}
|
||||
|
||||
fun remove(buildRoot: VirtualFile) {
|
||||
@@ -38,13 +42,18 @@ internal object GradleBuildRootDataSerializer {
|
||||
LastModifiedFiles.remove(buildRoot)
|
||||
}
|
||||
|
||||
private object Externalizer: DataExternalizer<GradleBuildRootData> {
|
||||
inner class Externalizer: DataExternalizer<GradleBuildRootData> {
|
||||
override fun save(out: DataOutput, value: GradleBuildRootData) =
|
||||
writeKotlinDslScriptModels(out, value)
|
||||
|
||||
override fun read(`in`: DataInput): GradleBuildRootData =
|
||||
readKotlinDslScriptModels(`in`, currentBuildRoot.get().path)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun getInstance(): GradleBuildRootDataSerializer = service()
|
||||
}
|
||||
}
|
||||
|
||||
@IntellijInternalApi
|
||||
|
||||
@@ -3,8 +3,8 @@
|
||||
package org.jetbrains.kotlin.idea.gradleJava.scripting.roots
|
||||
|
||||
import com.intellij.codeInsight.daemon.DaemonCodeAnalyzer
|
||||
import com.intellij.openapi.application.ReadAction
|
||||
import com.intellij.openapi.application.runReadAction
|
||||
import com.intellij.openapi.diagnostic.ControlFlowException
|
||||
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager
|
||||
import com.intellij.openapi.progress.util.BackgroundTaskUtil
|
||||
@@ -186,7 +186,7 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(pr
|
||||
val newRoot = tryCreateImportedRoot(sync.workingDir, LastModifiedFiles()) { mergedData } ?: return null
|
||||
val buildRootDir = newRoot.dir ?: return null
|
||||
|
||||
GradleBuildRootDataSerializer.write(buildRootDir, mergedData)
|
||||
GradleBuildRootDataSerializer.getInstance().write(buildRootDir, mergedData)
|
||||
newRoot.saveLastModifiedFiles()
|
||||
|
||||
return newRoot
|
||||
@@ -309,7 +309,7 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(pr
|
||||
|
||||
private fun tryLoadFromFsCache(settings: GradleProjectSettings, version: String): Imported? {
|
||||
return tryCreateImportedRoot(settings.externalProjectPath) {
|
||||
GradleBuildRootDataSerializer.read(it)?.let { data ->
|
||||
GradleBuildRootDataSerializer.getInstance().read(it)?.let { data ->
|
||||
val gradleHome = data.gradleHome
|
||||
if (gradleHome.isNotBlank() && GradleInstallationManager.getGradleVersion(gradleHome) != version) return@let null
|
||||
|
||||
@@ -335,7 +335,7 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(pr
|
||||
return Imported(externalProjectPath, data, lastModifiedFiles)
|
||||
} catch (e: Exception) {
|
||||
when (e) {
|
||||
is ReadAction.CannotReadException -> scriptingDebugLog { "tryCreateImportedRoot cancelled" }
|
||||
is ControlFlowException -> throw e
|
||||
else -> scriptingErrorLog("Cannot load script configurations from file attributes for $externalProjectPath", e)
|
||||
}
|
||||
return null
|
||||
@@ -367,7 +367,7 @@ class GradleBuildRootsManager(val project: Project) : GradleBuildRootsLocator(pr
|
||||
private fun removeData(rootPath: String) {
|
||||
val buildRoot = LocalFileSystem.getInstance().findFileByPath(rootPath)
|
||||
if (buildRoot != null) {
|
||||
GradleBuildRootDataSerializer.remove(buildRoot)
|
||||
GradleBuildRootDataSerializer.getInstance().remove(buildRoot)
|
||||
LastModifiedFiles.remove(buildRoot)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user