store soft ref to the schema

GitOrigin-RevId: 74debda71c1612954124a461a62388e698be0128
This commit is contained in:
Dennis Ushakov
2019-12-19 17:02:07 +00:00
committed by intellij-monorepo-bot
parent 7a4c0621c3
commit 2c9efdd5c7
@@ -11,9 +11,9 @@ import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.project.DumbAware
import com.intellij.openapi.project.Project
import com.intellij.openapi.util.Key
import com.intellij.openapi.util.UserDataHolderBase
import com.intellij.openapi.util.text.StringUtil
import com.intellij.openapi.vfs.VirtualFile
import com.intellij.reference.SoftReference
import com.intellij.testFramework.LightVirtualFile
import com.intellij.util.SystemProperties
import com.jetbrains.jsonSchema.extension.JsonSchemaFileProvider
@@ -25,7 +25,7 @@ import org.jetbrains.io.json
internal val LOG = logger<IntellijConfigurationJsonSchemaProviderFactory>()
private val PROVIDER_KEY = Key.create<List<JsonSchemaFileProvider>>("IntellijConfigurationJsonSchemaProvider")
private val PROVIDER_KEY = Key.create<SoftReference<List<JsonSchemaFileProvider>>>("IntellijConfigurationJsonSchemaProvider")
internal class IntellijConfigurationJsonSchemaProviderFactory : JsonSchemaProviderFactory, DumbAware {
private val schemeContent by lazy {
@@ -33,7 +33,7 @@ internal class IntellijConfigurationJsonSchemaProviderFactory : JsonSchemaProvid
}
override fun getProviders(project: Project): List<JsonSchemaFileProvider> {
var result = PROVIDER_KEY.get(project)
var result = PROVIDER_KEY.get(project)?.get()
if (result != null) {
return result
}
@@ -42,7 +42,8 @@ internal class IntellijConfigurationJsonSchemaProviderFactory : JsonSchemaProvid
// LightVirtualFile cannot be cached per application, must be stored per project.
// Yes, it is hack, but for now decided to not fix this issue on platform level.
result = listOf(MyJsonSchemaFileProvider())
return (project as UserDataHolderBase).putUserDataIfAbsent(PROVIDER_KEY, result)
project.putUserData(PROVIDER_KEY, SoftReference<List<JsonSchemaFileProvider>>(result))
return result
}
inner class MyJsonSchemaFileProvider : JsonSchemaFileProvider, DumbAware {