K2 Scripting: mark parameters and DD containers with dedicated origins

needed for properly processing script CFG
This commit is contained in:
Ilya Chernikov
2023-11-22 16:39:03 +01:00
committed by Space Team
parent 8c30f3b2bc
commit b0f44e8f69
5 changed files with 12 additions and 5 deletions
@@ -87,12 +87,13 @@ internal fun generateTemporaryVariable(
name: Name,
initializer: FirExpression,
typeRef: FirTypeRef? = null,
origin: FirDeclarationOrigin = FirDeclarationOrigin.Source,
extractAnnotationsTo: (KtAnnotated.(FirAnnotationContainerBuilder) -> Unit),
): FirVariable =
buildProperty {
this.source = source
this.moduleData = moduleData
origin = FirDeclarationOrigin.Source
this.origin = origin
returnTypeRef = typeRef ?: FirImplicitTypeRefImplWithoutSource
this.name = name
this.initializer = initializer
@@ -108,6 +109,7 @@ internal fun generateTemporaryVariable(
source: KtSourceElement?,
specialName: String,
initializer: FirExpression,
origin: FirDeclarationOrigin = FirDeclarationOrigin.Source,
extractAnnotationsTo: (KtAnnotated.(FirAnnotationContainerBuilder) -> Unit),
): FirVariable =
generateTemporaryVariable(
@@ -115,7 +117,8 @@ internal fun generateTemporaryVariable(
source,
Name.special("<$specialName>"),
initializer,
null,
typeRef = null,
origin,
extractAnnotationsTo,
)
@@ -1294,6 +1294,7 @@ open class PsiRawFirBuilder(
declaration.toFirSourceElement(),
"destruct",
declaration.initializer.toFirExpression { ConeSyntaxDiagnostic("Initializer required for destructuring declaration") },
origin = FirDeclarationOrigin.Synthetic.ScriptTopLevelDestructuringDeclarationContainer,
extractAnnotationsTo = { extractAnnotationsTo(it) }
).apply {
isDestructuringDeclarationContainerVariable = true
@@ -34,6 +34,7 @@ sealed class FirDeclarationOrigin(
object TypeAliasConstructor : Synthetic()
object FakeFunction : Synthetic()
object ForwardDeclaration : Synthetic()
object ScriptTopLevelDestructuringDeclarationContainer : Synthetic()
}
object DynamicScope : FirDeclarationOrigin()
object SamConstructor : FirDeclarationOrigin()
@@ -51,6 +52,7 @@ sealed class FirDeclarationOrigin(
sealed class ScriptCustomization(val kind: FirScriptCustomizationKind) : FirDeclarationOrigin() {
object Default : ScriptCustomization(FirScriptCustomizationKind.DEFAULT)
object ResultProperty : ScriptCustomization(FirScriptCustomizationKind.RESULT_PROPERTY)
object Parameter : ScriptCustomization(FirScriptCustomizationKind.PARAMETER)
}
class Plugin(val key: GeneratedDeclarationKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true)
@@ -10,5 +10,6 @@ const val SCRIPT_RECEIVER_NAME_PREFIX = "\$script_receiver"
enum class FirScriptCustomizationKind {
DEFAULT,
RESULT_PROPERTY
RESULT_PROPERTY,
PARAMETER
}
@@ -92,7 +92,7 @@ class FirScriptConfiguratorExtensionImpl(
buildProperty {
moduleData = session.moduleData
source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter)
origin = FirDeclarationOrigin.ScriptCustomization.Default
origin = FirDeclarationOrigin.ScriptCustomization.Parameter
// TODO: copy type parameters?
returnTypeRef = baseCtorParameter.returnTypeRef
name = baseCtorParameter.name
@@ -121,7 +121,7 @@ class FirScriptConfiguratorExtensionImpl(
buildProperty {
moduleData = session.moduleData
source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter)
origin = FirDeclarationOrigin.ScriptCustomization.Default
origin = FirDeclarationOrigin.ScriptCustomization.Parameter
returnTypeRef = typeRef
name = Name.identifier(propertyName)
symbol = FirPropertySymbol(name)