diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt index 520e18eb9fe..3ca0c4662d8 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiConversionUtils.kt @@ -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, ) diff --git a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt index c5538517ff2..f2ebb78aa5f 100644 --- a/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt +++ b/compiler/fir/raw-fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/PsiRawFirBuilder.kt @@ -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 diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt index 27d1dc0e631..26075b7cf86 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/FirDeclarationOrigin.kt @@ -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) diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirScriptUtils.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirScriptUtils.kt index 775e94e83fd..59f08d6f251 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirScriptUtils.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/declarations/utils/FirScriptUtils.kt @@ -10,5 +10,6 @@ const val SCRIPT_RECEIVER_NAME_PREFIX = "\$script_receiver" enum class FirScriptCustomizationKind { DEFAULT, - RESULT_PROPERTY + RESULT_PROPERTY, + PARAMETER } \ No newline at end of file diff --git a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptConfigurationExtensionImpl.kt b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptConfigurationExtensionImpl.kt index c3cd9fedbe0..93bbfce32f1 100644 --- a/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptConfigurationExtensionImpl.kt +++ b/plugins/scripting/scripting-compiler/src/org/jetbrains/kotlin/scripting/compiler/plugin/services/FirScriptConfigurationExtensionImpl.kt @@ -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)