[Analysis API] Add caching of built-in files in `BuiltinsVirtualFileProviderBaseImpl`
diff --git a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/BuiltinsVirtualFileProvider.kt b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/BuiltinsVirtualFileProvider.kt
index ff40d22..698df87 100644
--- a/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/BuiltinsVirtualFileProvider.kt
+++ b/analysis/decompiled/decompiler-to-psi/src/org/jetbrains/kotlin/analysis/decompiler/psi/BuiltinsVirtualFileProvider.kt
@@ -39,19 +39,22 @@
     }
 
     override fun createBuiltinsScope(project: Project): GlobalSearchScope {
-        val builtInFiles = getBuiltinVirtualFiles()
-        return GlobalSearchScope.filesScope(project, builtInFiles)
+        return GlobalSearchScope.filesScope(project, builtinVirtualFilesCached)
     }
 
     protected abstract fun findVirtualFile(url: URL): VirtualFile?
 
-    override fun getBuiltinVirtualFiles(): Set<VirtualFile> = builtInUrls.mapNotNullTo(mutableSetOf()) { url ->
-        val file = findVirtualFile(url)
-        if (file == null) {
-            logger<BuiltinsVirtualFileProvider>().warn("VirtualFile not found for builtin $url")
+    private val builtinVirtualFilesCached: Set<VirtualFile> by lazy(LazyThreadSafetyMode.PUBLICATION) {
+        builtInUrls.mapNotNullTo(mutableSetOf()) { url ->
+            val file = findVirtualFile(url)
+            if (file == null) {
+                logger<BuiltinsVirtualFileProvider>().warn("VirtualFile not found for builtin $url")
+            }
+            file
         }
-        file
     }
+
+    override fun getBuiltinVirtualFiles(): Set<VirtualFile> = builtinVirtualFilesCached
 }
 
 class BuiltinsVirtualFileProviderCliImpl : BuiltinsVirtualFileProviderBaseImpl() {