[scripting] Fix Kotlin reflection metadata for script constructors

This commit is contained in:
Ilya Muradyan
2021-12-01 23:06:39 +03:00
committed by teamcityserver
parent 176803689a
commit 7283ea86af
4 changed files with 63 additions and 9 deletions
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
import org.jetbrains.kotlin.codegen.context.CodegenContext
import org.jetbrains.kotlin.codegen.context.MethodContext
import org.jetbrains.kotlin.codegen.context.ScriptContext
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings.METHOD_FOR_FUNCTION
import org.jetbrains.kotlin.codegen.serialization.JvmSerializerExtension
import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.descriptors.ClassDescriptor
@@ -82,6 +83,8 @@ class ScriptCodegen private constructor(
val jvmSignature = typeMapper.mapScriptSignature(scriptDescriptor)
val asmMethod = jvmSignature.asmMethod
classBuilder.serializationBindings.put(METHOD_FOR_FUNCTION, scriptDescriptor.unsubstitutedPrimaryConstructor, asmMethod)
scriptContext.resultFieldInfo?.let { resultFieldInfo ->
classBuilder.newField(
NO_ORIGIN,
@@ -23,9 +23,10 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.expressions.impl.IrSetFieldImpl
import org.jetbrains.kotlin.ir.symbols.impl.IrValueParameterSymbolImpl
import org.jetbrains.kotlin.ir.types.IrSimpleType
import org.jetbrains.kotlin.ir.types.toArrayOrPrimitiveArrayType
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.ir.util.indexOrMinusOne
import org.jetbrains.kotlin.ir.util.isCrossinline
import org.jetbrains.kotlin.ir.util.isNoinline
import org.jetbrains.kotlin.ir.util.varargElementType
import org.jetbrains.kotlin.name.SpecialNames
import org.jetbrains.kotlin.psi.KtDestructuringDeclaration
import org.jetbrains.kotlin.psi.KtScript
@@ -155,6 +156,7 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG
irScript.providedProperties.forEach { add(it.first) }
}
irConstructor.parent = irScript
irConstructor.metadata = DescriptorMetadataSource.Function(descriptor.unsubstitutedPrimaryConstructor)
}
for (d in ktScript.declarations) {