KT-60749 Scripting: default definition as a fallback

This commit effectively reverts changes made in the scope of KT-60193,
namely c9eebffb and 2d50bd68.

^KT-60749 fixed
This commit is contained in:
Andrei Klunnyi
2023-07-27 12:11:28 +02:00
committed by Space Team
parent 69a35970eb
commit 419381af7f
2 changed files with 21 additions and 15 deletions
@@ -53,7 +53,10 @@ class FirScriptConfiguratorExtensionImpl(
val sourceFile = fileBuilder.sourceFile ?: return
val configuration = getOrLoadConfiguration(sourceFile)
check(configuration != null) { "Configuration for ${sourceFile.asString()} wasn't found" }
?: run {
log.warn("Configuration for ${sourceFile.asString()} wasn't found. FirScriptBuilder wasn't configured.")
return
}
// TODO: rewrite/extract decision logic for clarity
configuration.getNoDefault(ScriptCompilationConfiguration.baseClass)?.let { baseClass ->
@@ -162,23 +165,16 @@ class FirScriptConfiguratorExtensionImpl(
private fun KtSourceFile.asString() = path ?: name
private fun logConfiguration(file: KtSourceFile, config: ScriptCompilationConfiguration) {
log.debug(
"Using configuration: ${file.asString()} => " +
"(${config[ScriptCompilationConfiguration.displayName]}, " +
"ext=.${config[ScriptCompilationConfiguration.fileExtension]}, " +
"pattern=${config[ScriptCompilationConfiguration.filePathPattern]})"
)
}
private fun getOrLoadConfiguration(file: KtSourceFile): ScriptCompilationConfiguration? {
val service = checkNotNull(session.scriptDefinitionProviderService)
val sourceCode = file.toSourceCode()
val ktFile = sourceCode?.originalKtFile()
return with(service) {
ktFile?.let { asKtFile -> configurationFor(asKtFile)?.also { logConfiguration(file, it) } }
?: sourceCode?.let { asSourceCode -> configurationFor(asSourceCode)?.also { logConfiguration(file, it) } }
val configuration = with(service) {
ktFile?.let { asKtFile -> configurationFor(asKtFile) }
?: sourceCode?.let { asSourceCode -> configurationFor(asSourceCode) }
?: defaultConfiguration()?.also { log.debug("Default configuration loaded for ${file.asString()}") }
}
return configuration
}
private fun buildContextReceiverWithFqName(classFqn: FqName, customName: Name? = null) =
@@ -202,7 +198,7 @@ class FirScriptConfiguratorExtensionImpl(
get() = _knownAnnotationsForSamWithReceiver
companion object {
private val log = Logger.getInstance(FirScriptConfiguratorExtensionImpl::class.java)
private val log: Logger get() = Logger.getInstance(FirScriptConfiguratorExtensionImpl::class.java)
fun getFactory(hostConfiguration: ScriptingHostConfiguration): Factory {
return Factory { session -> FirScriptConfiguratorExtensionImpl(session, hostConfiguration) }
@@ -222,6 +218,9 @@ private fun FirScriptDefinitionProviderService.configurationFor(file: KtFile): S
private fun FirScriptDefinitionProviderService.configurationFor(sourceCode: SourceCode): ScriptCompilationConfiguration? =
definitionProvider?.findDefinition(sourceCode)?.compilationConfiguration
private fun FirScriptDefinitionProviderService.defaultConfiguration(): ScriptCompilationConfiguration? =
definitionProvider?.getDefaultDefinition()?.compilationConfiguration
fun KtSourceFile.toSourceCode(): SourceCode? = when (this) {
is KtPsiSourceFile -> (psiFile as? KtFile)?.let(::KtFileScriptSource) ?: VirtualFileScriptSource(psiFile.virtualFile)
is KtVirtualFileSourceFile -> VirtualFileScriptSource(virtualFile)