blob: 4df7d349cff300c3d684ebc50a0e4cc3d57d9af9 [file]
package com.intellij.configurationScript.providers
import com.intellij.configurationScript.ConfigurationFileManager
import com.intellij.configurationScript.readIntoObject
import com.intellij.configurationScript.schemaGenerators.PluginJsonSchemaGenerator
import com.intellij.openapi.components.BaseState
import com.intellij.openapi.project.Project
import com.intellij.openapi.project.processOpenedProjects
import com.intellij.openapi.updateSettings.impl.UpdateSettingsProvider
import com.intellij.openapi.util.NotNullLazyKey
import com.intellij.util.SmartList
import com.intellij.util.concurrency.SynchronizedClearableLazy
import com.intellij.util.xmlb.annotations.XCollection
private val dataKey = NotNullLazyKey.create<SynchronizedClearableLazy<PluginsConfiguration?>, Project>("MyUpdateSettingsProvider") { project ->
val data = SynchronizedClearableLazy {
val node = ConfigurationFileManager.getInstance(project).findValueNode(PluginJsonSchemaGenerator.plugins) ?: return@SynchronizedClearableLazy null
readIntoObject(PluginsConfiguration(), node)
}
ConfigurationFileManager.getInstance(project).registerClearableLazyValue(data)
data
}
private class MyUpdateSettingsProvider : UpdateSettingsProvider {
override fun getPluginRepositories(): List<String> {
val result = SmartList<String>()
processOpenedProjects { project ->
dataKey.getValue(project).value?.repositories?.let {
result.addAll(it)
}
}
return result
}
}
internal class PluginsConfiguration : BaseState() {
@get:XCollection
val repositories by list<String>()
}