K2 Scripting: mark parameters and DD containers with dedicated origins
needed for properly processing script CFG
This commit is contained in:
committed by
Space Team
parent
8c30f3b2bc
commit
b0f44e8f69
+5
-2
@@ -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
|
||||
}
|
||||
+2
-2
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user