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,
|
name: Name,
|
||||||
initializer: FirExpression,
|
initializer: FirExpression,
|
||||||
typeRef: FirTypeRef? = null,
|
typeRef: FirTypeRef? = null,
|
||||||
|
origin: FirDeclarationOrigin = FirDeclarationOrigin.Source,
|
||||||
extractAnnotationsTo: (KtAnnotated.(FirAnnotationContainerBuilder) -> Unit),
|
extractAnnotationsTo: (KtAnnotated.(FirAnnotationContainerBuilder) -> Unit),
|
||||||
): FirVariable =
|
): FirVariable =
|
||||||
buildProperty {
|
buildProperty {
|
||||||
this.source = source
|
this.source = source
|
||||||
this.moduleData = moduleData
|
this.moduleData = moduleData
|
||||||
origin = FirDeclarationOrigin.Source
|
this.origin = origin
|
||||||
returnTypeRef = typeRef ?: FirImplicitTypeRefImplWithoutSource
|
returnTypeRef = typeRef ?: FirImplicitTypeRefImplWithoutSource
|
||||||
this.name = name
|
this.name = name
|
||||||
this.initializer = initializer
|
this.initializer = initializer
|
||||||
@@ -108,6 +109,7 @@ internal fun generateTemporaryVariable(
|
|||||||
source: KtSourceElement?,
|
source: KtSourceElement?,
|
||||||
specialName: String,
|
specialName: String,
|
||||||
initializer: FirExpression,
|
initializer: FirExpression,
|
||||||
|
origin: FirDeclarationOrigin = FirDeclarationOrigin.Source,
|
||||||
extractAnnotationsTo: (KtAnnotated.(FirAnnotationContainerBuilder) -> Unit),
|
extractAnnotationsTo: (KtAnnotated.(FirAnnotationContainerBuilder) -> Unit),
|
||||||
): FirVariable =
|
): FirVariable =
|
||||||
generateTemporaryVariable(
|
generateTemporaryVariable(
|
||||||
@@ -115,7 +117,8 @@ internal fun generateTemporaryVariable(
|
|||||||
source,
|
source,
|
||||||
Name.special("<$specialName>"),
|
Name.special("<$specialName>"),
|
||||||
initializer,
|
initializer,
|
||||||
null,
|
typeRef = null,
|
||||||
|
origin,
|
||||||
extractAnnotationsTo,
|
extractAnnotationsTo,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1294,6 +1294,7 @@ open class PsiRawFirBuilder(
|
|||||||
declaration.toFirSourceElement(),
|
declaration.toFirSourceElement(),
|
||||||
"destruct",
|
"destruct",
|
||||||
declaration.initializer.toFirExpression { ConeSyntaxDiagnostic("Initializer required for destructuring declaration") },
|
declaration.initializer.toFirExpression { ConeSyntaxDiagnostic("Initializer required for destructuring declaration") },
|
||||||
|
origin = FirDeclarationOrigin.Synthetic.ScriptTopLevelDestructuringDeclarationContainer,
|
||||||
extractAnnotationsTo = { extractAnnotationsTo(it) }
|
extractAnnotationsTo = { extractAnnotationsTo(it) }
|
||||||
).apply {
|
).apply {
|
||||||
isDestructuringDeclarationContainerVariable = true
|
isDestructuringDeclarationContainerVariable = true
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ sealed class FirDeclarationOrigin(
|
|||||||
object TypeAliasConstructor : Synthetic()
|
object TypeAliasConstructor : Synthetic()
|
||||||
object FakeFunction : Synthetic()
|
object FakeFunction : Synthetic()
|
||||||
object ForwardDeclaration : Synthetic()
|
object ForwardDeclaration : Synthetic()
|
||||||
|
object ScriptTopLevelDestructuringDeclarationContainer : Synthetic()
|
||||||
}
|
}
|
||||||
object DynamicScope : FirDeclarationOrigin()
|
object DynamicScope : FirDeclarationOrigin()
|
||||||
object SamConstructor : FirDeclarationOrigin()
|
object SamConstructor : FirDeclarationOrigin()
|
||||||
@@ -51,6 +52,7 @@ sealed class FirDeclarationOrigin(
|
|||||||
sealed class ScriptCustomization(val kind: FirScriptCustomizationKind) : FirDeclarationOrigin() {
|
sealed class ScriptCustomization(val kind: FirScriptCustomizationKind) : FirDeclarationOrigin() {
|
||||||
object Default : ScriptCustomization(FirScriptCustomizationKind.DEFAULT)
|
object Default : ScriptCustomization(FirScriptCustomizationKind.DEFAULT)
|
||||||
object ResultProperty : ScriptCustomization(FirScriptCustomizationKind.RESULT_PROPERTY)
|
object ResultProperty : ScriptCustomization(FirScriptCustomizationKind.RESULT_PROPERTY)
|
||||||
|
object Parameter : ScriptCustomization(FirScriptCustomizationKind.PARAMETER)
|
||||||
}
|
}
|
||||||
class Plugin(val key: GeneratedDeclarationKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true)
|
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 {
|
enum class FirScriptCustomizationKind {
|
||||||
DEFAULT,
|
DEFAULT,
|
||||||
RESULT_PROPERTY
|
RESULT_PROPERTY,
|
||||||
|
PARAMETER
|
||||||
}
|
}
|
||||||
+2
-2
@@ -92,7 +92,7 @@ class FirScriptConfiguratorExtensionImpl(
|
|||||||
buildProperty {
|
buildProperty {
|
||||||
moduleData = session.moduleData
|
moduleData = session.moduleData
|
||||||
source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter)
|
source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter)
|
||||||
origin = FirDeclarationOrigin.ScriptCustomization.Default
|
origin = FirDeclarationOrigin.ScriptCustomization.Parameter
|
||||||
// TODO: copy type parameters?
|
// TODO: copy type parameters?
|
||||||
returnTypeRef = baseCtorParameter.returnTypeRef
|
returnTypeRef = baseCtorParameter.returnTypeRef
|
||||||
name = baseCtorParameter.name
|
name = baseCtorParameter.name
|
||||||
@@ -121,7 +121,7 @@ class FirScriptConfiguratorExtensionImpl(
|
|||||||
buildProperty {
|
buildProperty {
|
||||||
moduleData = session.moduleData
|
moduleData = session.moduleData
|
||||||
source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter)
|
source = this@configure.source?.fakeElement(KtFakeSourceElementKind.ScriptParameter)
|
||||||
origin = FirDeclarationOrigin.ScriptCustomization.Default
|
origin = FirDeclarationOrigin.ScriptCustomization.Parameter
|
||||||
returnTypeRef = typeRef
|
returnTypeRef = typeRef
|
||||||
name = Name.identifier(propertyName)
|
name = Name.identifier(propertyName)
|
||||||
symbol = FirPropertySymbol(name)
|
symbol = FirPropertySymbol(name)
|
||||||
|
|||||||
Reference in New Issue
Block a user