Scripts: pass File finding script definition instead of File.name

This commit is contained in:
Natalia Selezneva
2019-07-09 12:49:44 +03:00
parent ac4df86fa6
commit fbe965be9d
8 changed files with 36 additions and 25 deletions
@@ -68,25 +68,25 @@ class ScriptDefinitionsManager(private val project: Project) : LazyScriptDefinit
private val failedContributorsHashes = HashSet<Int>()
private val scriptDefinitionsCacheLock = ReentrantReadWriteLock()
private val scriptDefinitionsCache = SLRUMap<String, ScriptDefinition>(10, 10)
private val scriptDefinitionsCache = SLRUMap<File, ScriptDefinition>(10, 10)
override fun findDefinition(fileName: String): ScriptDefinition? {
if (nonScriptFileName(fileName)) return null
override fun findDefinition(file: File): ScriptDefinition? {
if (nonScriptFileName(file.name)) return null
if (!isReady()) return null
val cached = scriptDefinitionsCacheLock.write { scriptDefinitionsCache.get(fileName) }
val cached = scriptDefinitionsCacheLock.write { scriptDefinitionsCache.get(file) }
if (cached != null) return cached
val definition = super.findDefinition(fileName) ?: return null
val definition = super.findDefinition(file) ?: return null
scriptDefinitionsCacheLock.write {
scriptDefinitionsCache.put(fileName, definition)
scriptDefinitionsCache.put(file, definition)
}
return definition
}
override fun findScriptDefinition(fileName: String): KotlinScriptDefinition? = findDefinition(fileName)?.legacyDefinition
override fun findScriptDefinition(fileName: String): KotlinScriptDefinition? = findDefinition(File(fileName))?.legacyDefinition
fun reloadDefinitionsBy(source: ScriptDefinitionsSource) = lock.write {
if (definitions == null) return // not loaded yet
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.parsing.KotlinParserDefinition
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinition
import org.jetbrains.kotlin.scripting.resolve.KotlinScriptDefinitionFromAnnotatedTemplate
import java.io.File
class MultipleScriptDefinitionsChecker(private val project: Project) : EditorNotifications.Provider<EditorNotificationPanel>() {
@@ -41,7 +42,7 @@ class MultipleScriptDefinitionsChecker(private val project: Project) : EditorNot
val allApplicableDefinitions = ScriptDefinitionsManager.getInstance(project)
.getAllDefinitions()
.filter {
it.asLegacyOrNull<StandardIdeScriptDefinition>() == null && it.isScript(ktFile.name) &&
it.asLegacyOrNull<StandardIdeScriptDefinition>() == null && it.isScript(File(file.path)) &&
KotlinScriptingSettings.getInstance(project).isScriptDefinitionEnabled(it)
}
.toList()