From 6a1be79f27124cc1a983546eb129fd5fb4f759a6 Mon Sep 17 00:00:00 2001 From: Vlad Koshkin Date: Fri, 13 Sep 2024 11:28:00 +0200 Subject: [PATCH] [kotlin] revert 'remove VFS refresh in ScriptConfigurationManager' commit ^KTIJ-31249 Fixed GitOrigin-RevId: 6497d6483a0afc8bf05a6670304b4a504cf064d7 --- .../core/script/ScriptConfigurationManager.kt | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ScriptConfigurationManager.kt b/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ScriptConfigurationManager.kt index 7d97cee94025..1b45dec9cf02 100644 --- a/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ScriptConfigurationManager.kt +++ b/plugins/kotlin/base/scripting/src/org/jetbrains/kotlin/idea/core/script/ScriptConfigurationManager.kt @@ -4,11 +4,13 @@ package org.jetbrains.kotlin.idea.core.script import com.intellij.ide.scratch.ScratchUtil import com.intellij.lang.injection.InjectedLanguageManager +import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.components.service import com.intellij.openapi.components.serviceIfCreated import com.intellij.openapi.project.Project import com.intellij.openapi.vfs.StandardFileSystems import com.intellij.openapi.vfs.VirtualFile +import com.intellij.openapi.vfs.VirtualFileSystem import com.intellij.psi.PsiElement import com.intellij.psi.PsiFile import com.intellij.psi.PsiRecursiveElementVisitor @@ -17,6 +19,7 @@ import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.idea.core.script.ClasspathToVfsConverter.classpathEntryToVfs import org.jetbrains.kotlin.idea.core.script.configuration.CompositeScriptConfigurationManager import org.jetbrains.kotlin.idea.core.script.configuration.DefaultScriptingSupport +import org.jetbrains.kotlin.idea.util.application.isUnitTestMode import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.scripting.definitions.ScriptDependenciesProvider import org.jetbrains.kotlin.scripting.resolve.ScriptCompilationConfigurationResult @@ -176,11 +179,24 @@ object ClasspathToVfsConverter { val key = path.pathString val newType = path.fileType + //we cannot use `refreshAndFindFileByPath` under read lock + fun VirtualFileSystem.findLocalFileByPath(filePath: String): VirtualFile? { + val application = ApplicationManager.getApplication() + + return if (!application.isDispatchThread() && application.isReadAccessAllowed() + || isUnitTestMode() + ) { + findFileByPath(filePath) + } else { + refreshAndFindFileByPath(filePath) + } + } + fun compute(filePath: String): Pair { return newType to when (newType) { FileType.NOT_EXISTS, FileType.UNKNOWN -> null - FileType.DIRECTORY -> StandardFileSystems.local()?.findFileByPath(filePath) - FileType.REGULAR_FILE -> StandardFileSystems.jar()?.findFileByPath(filePath + URLUtil.JAR_SEPARATOR) + FileType.DIRECTORY -> StandardFileSystems.local()?.findLocalFileByPath(filePath) + FileType.REGULAR_FILE -> StandardFileSystems.jar()?.findLocalFileByPath(filePath + URLUtil.JAR_SEPARATOR) } }