@@ -45,11 +45,9 @@ import com.intellij.serviceContainer.BaseKeyedLazyInstance
4545import com.intellij.util.KeyedLazyInstance
4646import com.intellij.util.xmlb.annotations.Attribute
4747import java.util.ResourceBundle
48- import java.util.concurrent.TimeUnit
4948import javax.swing.JComponent
5049import kotlinx.coroutines.Dispatchers
51- import kotlinx.coroutines.withContext
52- import org.jetbrains.concurrency.runAsync
50+ import kotlinx.coroutines.runBlocking
5351
5452/* *
5553 * Extensions responsible for creating a [TemplateDescriptor] based on whatever data it is provided in its configuration
@@ -81,8 +79,9 @@ interface TemplateProvider {
8179 modalityState : ModalityState ,
8280 repoRoot : VirtualFile ,
8381 templates : MutableList <VfsLoadedTemplate > = mutableListOf(),
84- bundle : ResourceBundle ? = loadMessagesBundle(modalityState, repoRoot)
85- ): List <VfsLoadedTemplate > = withContext(Dispatchers .IO ) {
82+ bundle : ResourceBundle ? = null
83+ ): List <VfsLoadedTemplate > {
84+ val bundle = bundle ? : loadMessagesBundle(modalityState, repoRoot)
8685 val templatesToLoad = mutableListOf<VirtualFile >()
8786 val visitor = object : VirtualFileVisitor <Unit >() {
8887 override fun visitFile (file : VirtualFile ): Boolean {
@@ -115,10 +114,10 @@ interface TemplateProvider {
115114 }
116115 }
117116
118- templates
117+ return templates
119118 }
120119
121- fun loadMessagesBundle (modalityState : ModalityState , repoRoot : VirtualFile ): ResourceBundle ? = try {
120+ suspend fun loadMessagesBundle (modalityState : ModalityState , repoRoot : VirtualFile ): ResourceBundle ? = try {
122121 val locale = DynamicBundle .getLocale()
123122 // Simplified bundle resolution, but covers all the most common cases
124123 val baseBundle = doLoadMessageBundle(
@@ -145,7 +144,7 @@ interface TemplateProvider {
145144 null
146145 }
147146
148- private fun doLoadMessageBundle (
147+ private suspend fun doLoadMessageBundle (
149148 file : VirtualFile ? ,
150149 modalityState : ModalityState ,
151150 parent : ResourceBundle ?
@@ -155,9 +154,8 @@ interface TemplateProvider {
155154 }
156155
157156 try {
158- return runAsync {
159- file.inputStream.reader().use { TemplateResourceBundle (it, parent) }
160- }.blockingGet(20 , TimeUnit .MILLISECONDS )
157+ return file.refreshSync(modalityState)
158+ ?.inputStream?.reader()?.use { TemplateResourceBundle (it, parent) }
161159 } catch (t: Throwable ) {
162160 if (t is ControlFlowException ) {
163161 return parent
@@ -169,19 +167,15 @@ interface TemplateProvider {
169167 return parent
170168 }
171169
172- fun createVfsLoadedTemplate (
170+ suspend fun createVfsLoadedTemplate (
173171 modalityState : ModalityState ,
174172 templateRoot : VirtualFile ,
175173 descriptorFile : VirtualFile ,
176174 tooltip : String? = null,
177175 bundle : ResourceBundle ? = null
178176 ): VfsLoadedTemplate ? {
179- var descriptor = runCatching {
180- runAsync {
181- descriptorFile.refreshSync(modalityState)
182- Gson ().fromJson<TemplateDescriptor >(descriptorFile.readText())
183- }.blockingGet(100 , TimeUnit .MILLISECONDS )
184- }.getOrNull() ? : return null
177+ descriptorFile.refreshSync(modalityState)
178+ var descriptor = Gson ().fromJson<TemplateDescriptor >(descriptorFile.readText())
185179 if (descriptor.version != TemplateDescriptor .FORMAT_VERSION ) {
186180 thisLogger().warn(" Cannot handle template ${descriptorFile.path} of version ${descriptor.version} " )
187181 return null
@@ -200,7 +194,7 @@ interface TemplateProvider {
200194 descriptor.translateOrNull(" platform.${labelKey.lowercase()} .label" ) ? : descriptor.translate(labelKey)
201195
202196 if (descriptor.inherit != null ) {
203- val parent = templateRoot.findFileByRelativePath(descriptor.inherit)
197+ val parent = templateRoot.findFileByRelativePath(descriptor.inherit!! )
204198 if (parent != null ) {
205199 parent.refresh(false , false )
206200 val parentDescriptor = Gson ().fromJson<TemplateDescriptor >(parent.readText())
@@ -237,5 +231,5 @@ class TemplateProviderBean : BaseKeyedLazyInstance<TemplateProvider>(), KeyedLaz
237231
238232 override fun getKey (): String = name
239233
240- override fun getImplementationClassName (): String = implementation
234+ override fun getImplementationClassName (): String? = implementation
241235}
0 commit comments