Scripting: optimize check for allowed scripts on init

This commit is contained in:
Ilya Chernikov
2022-12-14 17:39:03 +01:00
committed by Space Team
parent 9ca24b6965
commit 88d140527f
@@ -5,6 +5,7 @@
package org.jetbrains.kotlin.scripting.compiler.plugin.extensions
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.openapi.project.Project
import org.jetbrains.kotlin.cli.common.CLIConfigurationKeys.MESSAGE_COLLECTOR_KEY
import org.jetbrains.kotlin.cli.common.messages.CompilerMessageSeverity
@@ -13,6 +14,7 @@ import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.config.LanguageFeature
import org.jetbrains.kotlin.config.languageVersionSettings
import org.jetbrains.kotlin.extensions.ProcessSourcesBeforeCompilingExtension
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.scripting.definitions.ScriptDefinitionProvider
import org.jetbrains.kotlin.scripting.resolve.KtFileScriptSource
@@ -31,11 +33,13 @@ class ScriptingProcessSourcesBeforeCompilingExtension(val project: Project) : Pr
return scriptDefinition?.compilationConfiguration?.get(ScriptCompilationConfiguration.isStandalone) ?: true
}
if (configuration.getBoolean(CommonConfigurationKeys.ALLOW_ANY_SCRIPTS_IN_SOURCE_ROOTS)) return sources
// TODO: see comment at LazyScriptDefinitionProvider.Companion.getNonScriptFilenameSuffixes
val nonScriptFilenameSuffixes = arrayOf(".${KotlinFileType.EXTENSION}", ".${JavaFileType.DEFAULT_EXTENSION}")
// filter out scripts that are not suitable for source roots, according to the compiler configuration and script definitions
return sources.filter { ktFile ->
when {
!ktFile.isScript() -> true
configuration.getBoolean(CommonConfigurationKeys.ALLOW_ANY_SCRIPTS_IN_SOURCE_ROOTS) -> true
nonScriptFilenameSuffixes.any { ktFile.virtualFilePath.endsWith(it) } -> true
!ktFile.isStandaloneScript() -> true
else -> {
if (!shouldSkipStandaloneScripts) {