K2 Scripting: add support for result field

This commit is contained in:
Ilya Chernikov
2023-04-28 17:11:56 +02:00
committed by Space Team
parent 6c7751b0af
commit d24fc3b581
20 changed files with 87 additions and 25 deletions
@@ -31,6 +31,7 @@ abstract class FirScript : FirDeclaration() {
abstract override val symbol: FirScriptSymbol
abstract val parameters: List<FirVariable>
abstract val contextReceivers: List<FirContextReceiver>
abstract val resultPropertyName: Name?
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitScript(this, data)
@@ -48,6 +48,7 @@ class FirScriptBuilder : FirAnnotationContainerBuilder {
lateinit var symbol: FirScriptSymbol
val parameters: MutableList<FirVariable> = mutableListOf()
val contextReceivers: MutableList<FirContextReceiver> = mutableListOf()
var resultPropertyName: Name? = null
override fun build(): FirScript {
return FirScriptImpl(
@@ -62,6 +63,7 @@ class FirScriptBuilder : FirAnnotationContainerBuilder {
symbol,
parameters,
contextReceivers.toMutableOrEmpty(),
resultPropertyName,
)
}
@@ -92,5 +94,6 @@ inline fun buildScriptCopy(original: FirScript, init: FirScriptBuilder.() -> Uni
copyBuilder.symbol = original.symbol
copyBuilder.parameters.addAll(original.parameters)
copyBuilder.contextReceivers.addAll(original.contextReceivers)
copyBuilder.resultPropertyName = original.resultPropertyName
return copyBuilder.apply(init).build()
}
@@ -43,6 +43,7 @@ internal class FirScriptImpl(
override val symbol: FirScriptSymbol,
override val parameters: MutableList<FirVariable>,
override var contextReceivers: MutableOrEmptyList<FirContextReceiver>,
override val resultPropertyName: Name?,
) : FirScript() {
init {
symbol.bind(this)
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.fir.declarations
import org.jetbrains.kotlin.GeneratedDeclarationKey
import org.jetbrains.kotlin.fir.declarations.utils.FirScriptCustomizationKind
sealed class FirDeclarationOrigin(
private val displayName: String? = null,
@@ -36,7 +37,10 @@ sealed class FirDeclarationOrigin(
object Delegated : FirDeclarationOrigin()
object RenamedForOverride : FirDeclarationOrigin()
object WrappedIntegerOperator : FirDeclarationOrigin()
object ScriptCustomization : FirDeclarationOrigin()
sealed class ScriptCustomization(val kind: FirScriptCustomizationKind) : FirDeclarationOrigin() {
object Default : ScriptCustomization(FirScriptCustomizationKind.DEFAULT)
object ResultProperty : ScriptCustomization(FirScriptCustomizationKind.RESULT_PROPERTY)
}
class Plugin(val key: GeneratedDeclarationKey) : FirDeclarationOrigin(displayName = "Plugin[$key]", generated = true)
override fun toString(): String {
@@ -7,3 +7,8 @@ package org.jetbrains.kotlin.fir.declarations.utils
const val SCRIPT_SPECIAL_NAME_STRING = "<script>"
const val SCRIPT_RECEIVER_NAME_PREFIX = "\$script_receiver"
enum class FirScriptCustomizationKind {
DEFAULT,
RESULT_PROPERTY
}
@@ -493,6 +493,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
+symbol("FirScriptSymbol")
+FieldList("parameters", variable, withReplace = false)
+fieldList(contextReceiver, useMutableOrEmpty = true)
+field("resultPropertyName", nameType, nullable = true)
}
codeFragment.configure {