K2 Scripting: fix script this receiver handling in IR

also fix accessor lowering
This commit is contained in:
Ilya Chernikov
2023-05-03 15:54:13 +02:00
committed by Space Team
parent 07df03dbec
commit 02e2438d37
11 changed files with 48 additions and 23 deletions
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.declarations.FirDeclarationOrigin
import org.jetbrains.kotlin.fir.declarations.builder.*
import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl
import org.jetbrains.kotlin.fir.declarations.primaryConstructorIfAny
import org.jetbrains.kotlin.fir.declarations.utils.SCRIPT_SPECIAL_NAME_STRING
import org.jetbrains.kotlin.fir.moduleData
import org.jetbrains.kotlin.fir.resolve.providers.dependenciesSymbolProvider
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
@@ -52,7 +53,7 @@ class FirScriptConfiguratorExtensionImpl(
// TODO: rewrite/extract decision logic for clarity
configuration[ScriptCompilationConfiguration.baseClass]?.let { baseClass ->
val baseClassFqn = FqName.fromSegments(baseClass.typeName.split("."))
contextReceivers.add(buildContextReceiverWithFqName(baseClassFqn))
contextReceivers.add(buildContextReceiverWithFqName(baseClassFqn, Name.special(SCRIPT_SPECIAL_NAME_STRING)))
val baseClassSymbol =
session.dependenciesSymbolProvider.getClassLikeSymbolByClassId(ClassId(baseClassFqn.parent(), baseClassFqn.shortName()))
@@ -138,16 +139,19 @@ class FirScriptConfiguratorExtensionImpl(
configuration?.let { body.invoke(it) }
}
private fun buildContextReceiverWithFqName(baseClassFqn: FqName) =
private fun buildContextReceiverWithFqName(classFqn: FqName, customName: Name? = null) =
buildContextReceiver {
typeRef = buildUserTypeRef {
isMarkedNullable = false
qualifier.addAll(
baseClassFqn.pathSegments().map {
classFqn.pathSegments().map {
FirQualifierPartImpl(null, it, FirTypeArgumentListImpl(null))
}
)
}
if (customName != null) {
customLabelName = customName
}
}
private val _knownAnnotationsForSamWithReceiver = hashSetOf<String>()