Do not store script definition in psiFile
This may cause problems when definitions are reordered or switched off KT-27375 Fixed
This commit is contained in:
@@ -32,6 +32,8 @@ import com.intellij.openapi.projectRoots.ex.PathUtilEx
|
||||
import com.intellij.openapi.roots.ProjectRootManager
|
||||
import com.intellij.openapi.vfs.VfsUtil
|
||||
import com.intellij.openapi.vfs.VirtualFile
|
||||
import com.intellij.ui.EditorNotifications
|
||||
import com.intellij.util.containers.SLRUMap
|
||||
import org.jetbrains.kotlin.idea.KotlinFileType
|
||||
import org.jetbrains.kotlin.idea.caches.project.SdkInfo
|
||||
import org.jetbrains.kotlin.idea.caches.project.getScriptRelatedModuleInfo
|
||||
@@ -42,6 +44,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
import org.jetbrains.kotlin.utils.addToStdlib.flattenTo
|
||||
import java.io.File
|
||||
import java.net.URLClassLoader
|
||||
import java.util.concurrent.locks.ReentrantReadWriteLock
|
||||
import kotlin.concurrent.write
|
||||
import kotlin.script.dependencies.Environment
|
||||
import kotlin.script.dependencies.ScriptContents
|
||||
@@ -61,6 +64,24 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
||||
private var definitionsByContributor = mutableMapOf<ScriptDefinitionContributor, List<KotlinScriptDefinition>>()
|
||||
private var definitions: Sequence<KotlinScriptDefinition>? = null
|
||||
|
||||
private val scriptDefinitionsCacheLock = ReentrantReadWriteLock()
|
||||
private val scriptDefinitionsCache = SLRUMap<String, KotlinScriptDefinition>(10, 10)
|
||||
|
||||
override fun findScriptDefinition(fileName: String): KotlinScriptDefinition? {
|
||||
if (nonScriptFileName(fileName)) return null
|
||||
|
||||
val cached = synchronized(scriptDefinitionsCacheLock) { scriptDefinitionsCache.get(fileName) }
|
||||
if (cached != null) return cached
|
||||
|
||||
val definition = super.findScriptDefinition(fileName) ?: return null
|
||||
|
||||
synchronized(scriptDefinitionsCacheLock) {
|
||||
scriptDefinitionsCache.put(fileName, definition)
|
||||
}
|
||||
|
||||
return definition
|
||||
}
|
||||
|
||||
fun reloadDefinitionsBy(contributor: ScriptDefinitionContributor) = lock.write {
|
||||
if (definitions == null) return // not loaded yet
|
||||
|
||||
@@ -129,6 +150,8 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
|
||||
}
|
||||
|
||||
clearCache()
|
||||
scriptDefinitionsCache.clear()
|
||||
|
||||
// TODO: clear by script type/definition
|
||||
ServiceManager.getService(project, ScriptDependenciesCache::class.java).clear()
|
||||
}
|
||||
|
||||
+2
-2
@@ -78,7 +78,7 @@ class ScriptDependenciesUpdater(
|
||||
|
||||
if (ApplicationManager.getApplication().isUnitTestMode && ApplicationManager.getApplication().isScriptDependenciesUpdaterDisabled == true) return
|
||||
|
||||
val scriptDef = findScriptDefinition(ktFile) ?: return
|
||||
val scriptDef = ktFile.script?.kotlinScriptDefinition ?: return
|
||||
|
||||
if (!ProjectRootsUtil.isInProjectSource(ktFile, includeScriptsOutsideSourceRoots = true)) return
|
||||
ScriptDependenciesLoader.updateDependencies(file, scriptDef, project, shouldNotifyRootsChanged = true)
|
||||
@@ -104,7 +104,7 @@ class ScriptDependenciesUpdater(
|
||||
}
|
||||
|
||||
val ktFile = PsiManager.getInstance(project).findFile(file) as? KtFile ?: return
|
||||
val scriptDef = findScriptDefinition(ktFile) ?: return
|
||||
val scriptDef = ktFile.script?.kotlinScriptDefinition ?: return
|
||||
|
||||
if (!ProjectRootsUtil.isInProjectSource(ktFile, includeScriptsOutsideSourceRoots = true)) return
|
||||
|
||||
|
||||
Reference in New Issue
Block a user