diff --git a/libraries/tools/kotlin-serialization/build.gradle b/libraries/tools/kotlin-serialization/build.gradle
index e6c7254d259..9d0d07851c8 100644
--- a/libraries/tools/kotlin-serialization/build.gradle
+++ b/libraries/tools/kotlin-serialization/build.gradle
@@ -8,7 +8,7 @@ configureJvmProject(project)
configurePublishing(project)
group = 'org.jetbrains.kotlinx'
-version = '0.6.2'
+version = '0.7.1'
if (!project.hasProperty("deploy")) {
version = "$version-SNAPSHOT"
}
@@ -47,7 +47,7 @@ jar {
manifestAttributes(manifest, project)
}
-ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDepsToShadedCompiler(project, jar, {}), {})
+//ArtifactsKt.runtimeJar(project, EmbeddableKt.rewriteDepsToShadedCompiler(project, jar, {}), {})
artifacts {
archives sourcesJar
diff --git a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt
index 502bd205444..264b19506fb 100644
--- a/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt
+++ b/libraries/tools/kotlin-serialization/src/main/kotlin/org/jetbrains/kotlinx/serialization/gradle/SerializationSubplugin.kt
@@ -45,14 +45,14 @@ class SerializationKotlinGradleSubplugin : KotlinGradleSubplugin
+
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt
index 52980ba8e52..f7236046be9 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/GeneratorHelpers.kt
@@ -22,24 +22,26 @@ import org.jetbrains.kotlin.ir.symbols.IrValueParameterSymbol
import org.jetbrains.kotlin.ir.symbols.IrValueSymbol
import org.jetbrains.kotlin.ir.types.IrType
import org.jetbrains.kotlin.ir.types.toKotlinType
-import org.jetbrains.kotlin.ir.util.TypeTranslator
-import org.jetbrains.kotlin.ir.util.declareSimpleFunctionWithOverrides
-import org.jetbrains.kotlin.ir.util.withScope
+import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.types.KotlinType
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializableProperty
+val BackendContext.externalSymbols: ReferenceSymbolTable get() = ir.symbols.externalSymbolTable
+
interface IrBuilderExtension {
val compilerContext: BackendContext
val translator: TypeTranslator
- fun IrClass.contributeFunction(descriptor: FunctionDescriptor, bodyGen: IrBlockBodyBuilder.(IrFunction) -> Unit) {
- val f = compilerContext.symbolTable.declareSimpleFunctionWithOverrides(
+ val BackendContext.localSymbolTable: SymbolTable
+
+ fun IrClass.contributeFunction(descriptor: FunctionDescriptor, fromStubs: Boolean = false, bodyGen: IrBlockBodyBuilder.(IrFunction) -> Unit) {
+ val f: IrSimpleFunction = if (!fromStubs) compilerContext.localSymbolTable.declareSimpleFunctionWithOverrides(
this.startOffset,
this.endOffset,
SERIALIZABLE_PLUGIN_ORIGIN,
descriptor
- )
+ ) else compilerContext.externalSymbols.referenceSimpleFunction(descriptor).owner
f.parent = this
f.returnType = descriptor.returnType!!.toIrType()
f.createParameterDeclarations()
@@ -51,7 +53,7 @@ interface IrBuilderExtension {
descriptor: ClassConstructorDescriptor,
bodyGen: IrBlockBodyBuilder.(IrConstructor) -> Unit
) {
- val c = compilerContext.symbolTable.declareConstructor(
+ val c = compilerContext.localSymbolTable.declareConstructor(
this.startOffset,
this.endOffset,
SERIALIZABLE_PLUGIN_ORIGIN,
@@ -90,12 +92,20 @@ interface IrBuilderExtension {
startOffset,
endOffset,
classDescriptor.defaultType.toIrType(),
- compilerContext.symbolTable.referenceClass(classDescriptor)
+ compilerContext.externalSymbols.referenceClass(classDescriptor)
+ )
+
+ fun IrBuilderWithScope.irGetObject(irObject: IrClass) =
+ IrGetObjectValueImpl(
+ startOffset,
+ endOffset,
+ irObject.defaultType,
+ irObject.symbol
)
fun T.buildWithScope(builder: (T) -> Unit): T =
also { irDeclaration ->
- compilerContext.symbolTable.withScope(irDeclaration.descriptor) {
+ compilerContext.localSymbolTable.withScope(irDeclaration.descriptor) {
builder(irDeclaration)
}
}
@@ -139,8 +149,12 @@ interface IrBuilderExtension {
fun KotlinType.toIrType() = translateType(this)
- val SerializableProperty.irField: IrField
- get () = compilerContext.symbolTable.referenceField(this.descriptor).owner
+ val SerializableProperty.irField: IrField get() = compilerContext.externalSymbols.referenceField(this.descriptor).owner
+// get () {
+// val symb = compilerContext.localSymbolTable.referenceField(this.descriptor)
+// return if (symb.isBound) symb.owner
+// else compilerContext.localSymbolTable.declareField()
+// }
/*
The rest of the file is mainly copied from FunctionGenerator.
@@ -155,7 +169,7 @@ interface IrBuilderExtension {
+IrDelegatingConstructorCallImpl(
startOffset, endOffset,
compilerContext.irBuiltIns.unitType,
- compilerContext.symbolTable.referenceConstructor(anyConstructor),
+ compilerContext.externalSymbols.referenceConstructor(anyConstructor),
anyConstructor
)
}
@@ -182,7 +196,7 @@ interface IrBuilderExtension {
}
fun generatePropertyBackingField(propertyDescriptor: PropertyDescriptor): IrField {
- return compilerContext.symbolTable.declareField(
+ return compilerContext.localSymbolTable.declareField(
UNDEFINED_OFFSET,
UNDEFINED_OFFSET,
SERIALIZABLE_PLUGIN_ORIGIN,
@@ -196,7 +210,7 @@ interface IrBuilderExtension {
fieldSymbol: IrFieldSymbol,
ownerSymbol: IrValueSymbol
): IrSimpleFunction {
- return compilerContext.symbolTable.declareSimpleFunctionWithOverrides(
+ return compilerContext.localSymbolTable.declareSimpleFunctionWithOverrides(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
SERIALIZABLE_PLUGIN_ORIGIN, descriptor
).buildWithScope { irAccessor ->
@@ -228,7 +242,7 @@ interface IrBuilderExtension {
irAccessor.symbol,
IrGetFieldImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
- compilerContext.symbolTable.referenceField(property),
+ compilerContext.localSymbolTable.referenceField(property),
property.type.toIrType(),
receiver
)
@@ -254,7 +268,7 @@ interface IrBuilderExtension {
irBody.statements.add(
IrSetFieldImpl(
UNDEFINED_OFFSET, UNDEFINED_OFFSET,
- compilerContext.symbolTable.referenceField(property),
+ compilerContext.localSymbolTable.referenceField(property),
receiver,
IrGetValueImpl(startOffset, endOffset, irValueParameter.type, irValueParameter.symbol),
compilerContext.irBuiltIns.unitType
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt
index 8cf12c622ba..01d61f2c971 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableCompanionIrGenerator.kt
@@ -6,6 +6,7 @@ import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.ir.builders.irReturn
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.expressions.IrExpression
+import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.TypeTranslator
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlinx.serialization.compiler.backend.common.SerializableCompanionCodegen
@@ -19,7 +20,10 @@ class SerializableCompanionIrGenerator(
override val compilerContext: BackendContext,
bindingContext: BindingContext
) : SerializableCompanionCodegen(irClass.descriptor), IrBuilderExtension {
- override val translator: TypeTranslator = TypeTranslator(compilerContext.symbolTable)
+ override val translator: TypeTranslator = TypeTranslator(compilerContext.externalSymbols, compilerContext.irBuiltIns.languageVersionSettings)
+ private val _table = SymbolTable()
+ override val BackendContext.localSymbolTable: SymbolTable
+ get() = _table
companion object {
fun generate(irClass: IrClass,
@@ -32,12 +36,13 @@ class SerializableCompanionIrGenerator(
}
}
- override fun generateSerializerGetter(methodDescriptor: FunctionDescriptor) = irClass.contributeFunction(methodDescriptor) { getter ->
+ override fun generateSerializerGetter(methodDescriptor: FunctionDescriptor) =
+ irClass.contributeFunction(methodDescriptor, fromStubs = true) { getter ->
val serializer = serializableDescriptor.classSerializer?.toClassDescriptor!!
val expr = if (serializer.kind == ClassKind.OBJECT) {
irGetObject(serializer)
} else {
- val ctor = compilerContext.symbolTable.referenceConstructor(serializer.unsubstitutedPrimaryConstructor!!)
+ val ctor = compilerContext.externalSymbols.referenceConstructor(serializer.unsubstitutedPrimaryConstructor!!)
val args: List = emptyList() // todo
irInvoke(null, ctor, *args.toTypedArray())
}
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt
index 141cbc04b7e..394dfda49a8 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializableIrGenerator.kt
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.ir.declarations.IrField
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.IrStatementOrigin
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
+import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.ir.util.TypeTranslator
import org.jetbrains.kotlin.ir.util.constructors
import org.jetbrains.kotlin.ir.util.deepCopyWithSymbols
@@ -29,8 +30,10 @@ class SerializableIrGenerator(
override val compilerContext: BackendContext,
bindingContext: BindingContext
) : SerializableCodegen(irClass.descriptor, bindingContext), IrBuilderExtension {
- override val translator: TypeTranslator = TypeTranslator(compilerContext.symbolTable)
-
+ override val translator: TypeTranslator = TypeTranslator(compilerContext.externalSymbols, compilerContext.irBuiltIns.languageVersionSettings)
+ private val _table = SymbolTable()
+ override val BackendContext.localSymbolTable: SymbolTable
+ get() = _table
override fun generateInternalConstructor(constructorDescriptor: ClassConstructorDescriptor) =
irClass.contributeConstructor(constructorDescriptor) { ctor ->
@@ -52,8 +55,8 @@ class SerializableIrGenerator(
val exceptionCtor =
serializableDescriptor.getClassFromSerializationPackage(MISSING_FIELD_EXC)
.unsubstitutedPrimaryConstructor!!
- val exceptionCtorRef = compilerContext.symbolTable.referenceConstructor(exceptionCtor)
- val exceptionType = exceptionCtor.returnType.toIrType()
+ val exceptionCtorRef = compilerContext.externalSymbols.referenceConstructor(exceptionCtor)
+ val exceptionType = exceptionCtorRef.owner.returnType
val thiz = irClass.thisReceiver!!
if (KotlinBuiltIns.isAny(irClass.descriptor.getSuperClassOrAny()))
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt
index 656c8f5f1f9..c338629145a 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt
@@ -21,9 +21,7 @@ import org.jetbrains.kotlin.ir.expressions.mapValueParameters
import org.jetbrains.kotlin.ir.expressions.mapValueParametersIndexed
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.types.*
-import org.jetbrains.kotlin.ir.util.TypeTranslator
-import org.jetbrains.kotlin.ir.util.constructors
-import org.jetbrains.kotlin.ir.util.withScope
+import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.descriptorUtil.classId
import org.jetbrains.kotlin.types.KotlinType
@@ -46,7 +44,10 @@ object SERIALIZABLE_PLUGIN_ORIGIN : IrDeclarationOriginImpl("SERIALIZER")
class SerializerIrGenerator(val irClass: IrClass, override val compilerContext: BackendContext, bindingContext: BindingContext) :
SerializerCodegen(irClass.descriptor, bindingContext), IrBuilderExtension {
- override val translator: TypeTranslator = TypeTranslator(compilerContext.symbolTable)
+ override val translator: TypeTranslator = TypeTranslator(compilerContext.externalSymbols, compilerContext.irBuiltIns.languageVersionSettings)
+ private val _table = SymbolTable()
+ override val BackendContext.localSymbolTable: SymbolTable
+ get() = _table
override fun generateSerialDesc() {
val desc: PropertyDescriptor = generatedSerialDescPropertyDescriptor ?: return
@@ -61,24 +62,24 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
lateinit var prop: IrProperty
// how to (auto)create backing field and getter/setter?
- compilerContext.symbolTable.withScope(irClass.descriptor) {
+ compilerContext.localSymbolTable.withScope(irClass.descriptor) {
introduceValueParameter(thisAsReceiverParameter)
prop = generateSimplePropertyWithBackingField(thisAsReceiverParameter.symbol, desc, irClass)
irClass.addMember(prop)
}
- compilerContext.symbolTable.declareAnonymousInitializer(
+ compilerContext.localSymbolTable.declareAnonymousInitializer(
irClass.startOffset, irClass.endOffset, SERIALIZABLE_PLUGIN_ORIGIN, irClass.descriptor
).buildWithScope { initIrBody ->
val ctor = irClass.declarations.filterIsInstance().singleOrNull()
- val serialClassDescImplCtor = compilerContext.symbolTable.referenceConstructor(serialDescImplConstructor)
- compilerContext.symbolTable.withScope(initIrBody.descriptor) {
+ val serialClassDescImplCtor = compilerContext.externalSymbols.referenceConstructor(serialDescImplConstructor)
+ compilerContext.localSymbolTable.withScope(initIrBody.descriptor) {
initIrBody.body = compilerContext.createIrBuilder(initIrBody.symbol).irBlockBody {
val localDesc = irTemporary(
irCall(
serialClassDescImplCtor,
- type = serialDescImplConstructor.returnType.toIrType()
+ type = serialClassDescImplCtor.owner.returnType
).mapValueParameters { irString(serialName) },
nameHint = "serialDesc"
)
@@ -125,7 +126,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
genericIndex: Int? = null
): IrExpression? {
val nullableSerClass =
- compilerContext.symbolTable.referenceClass(module.getClassFromInternalSerializationPackage(SpecialBuiltins.nullableSerializer))
+ compilerContext.externalSymbols.referenceClass(module.getClassFromInternalSerializationPackage(SpecialBuiltins.nullableSerializer))
if (serializerClass == null) {
if (genericIndex == null) return null
return TODO("Saved serializer for generic argument")
@@ -146,9 +147,9 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
val serializable = getSerializableClassDescriptorBySerializer(serializerClass)
val ctor = if (serializable?.declaredTypeParameters?.isNotEmpty() == true) {
KSerializerDescriptorResolver.createTypedSerializerConstructorDescriptor(serializerClass, serializableDescriptor)
- .let { compilerContext.symbolTable.referenceConstructor(it) }
+ .let { compilerContext.externalSymbols.referenceConstructor(it) }
} else {
- compilerContext.symbolTable.referenceConstructor(serializerClass.unsubstitutedPrimaryConstructor!!)
+ compilerContext.externalSymbols.referenceConstructor(serializerClass.unsubstitutedPrimaryConstructor!!)
}
return irInvoke(
null,
@@ -159,7 +160,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
}
fun ClassDescriptor.referenceMethod(methodName: String) =
- getFuncDesc(methodName).single().let { compilerContext.symbolTable.referenceFunction(it) }
+ getFuncDesc(methodName).single().let { compilerContext.externalSymbols.referenceFunction(it) }
override fun generateSave(function: FunctionDescriptor) = irClass.contributeFunction(function) { saveFunc ->
@@ -168,7 +169,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
val kOutputClass = serializerDescriptor.getClassFromSerializationPackage(STRUCTURE_ENCODER_CLASS)
- val descriptorGetterSymbol = compilerContext.symbolTable.referenceFunction(anySerialDescProperty?.getter!!)
+ val descriptorGetterSymbol = compilerContext.localSymbolTable.referenceFunction(anySerialDescProperty?.getter!!) //???
val localSerialDesc = irTemporary(irGet(descriptorGetterSymbol.owner.returnType, irThis(), descriptorGetterSymbol), "desc")
@@ -206,7 +207,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
irInt(index),
// todo: direct field access?
// irInvoke(irGet(serialObjectSymbol), compilerContext.symbolTable.referenceFunction(property.descriptor.getter!!))
- irGetField(irGet(serialObjectSymbol), compilerContext.symbolTable.referenceField(property.descriptor).owner)
+ irGetField(irGet(serialObjectSymbol), property.irField)
)
} else {
val writeFunc = kOutputClass.referenceMethod("${CallingConventions.encode}${sti.elementMethodPrefix}Serializable${CallingConventions.elementPostfix}")
@@ -218,7 +219,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
innerSerial,
// todo: direct field access?
// irInvoke(irGet(serialObjectSymbol), compilerContext.symbolTable.referenceFunction(property.descriptor.getter!!))
- irGetField(irGet(serialObjectSymbol), compilerContext.symbolTable.referenceField(property.descriptor).owner)
+ irGetField(irGet(serialObjectSymbol), property.irField)
)
}
}
@@ -256,7 +257,7 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
fun IrVariable.get() = irGet(this)
val inputClass = serializerDescriptor.getClassFromSerializationPackage(STRUCTURE_DECODER_CLASS)
- val descriptorGetterSymbol = compilerContext.symbolTable.referenceFunction(anySerialDescProperty?.getter!!)
+ val descriptorGetterSymbol = compilerContext.localSymbolTable.referenceFunction(anySerialDescProperty?.getter!!) //???
val localSerialDesc = irTemporary(irGet(descriptorGetterSymbol.owner.returnType, irThis(), descriptorGetterSymbol), "desc")
// workaround due to unavailability of labels (KT-25386)
@@ -332,14 +333,14 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
val exceptionCtor =
serializableDescriptor.getClassFromSerializationPackage(UNKNOWN_FIELD_EXC)
.unsubstitutedPrimaryConstructor!!
- val excClassRef = compilerContext.symbolTable.referenceConstructor(exceptionCtor)
+ val excClassRef = compilerContext.externalSymbols.referenceConstructor(exceptionCtor)
+elseBranch(
irThrow(
irInvoke(
null,
excClassRef,
indexVar.get(),
- typeHint = exceptionCtor.returnType.toIrType()
+ typeHint = excClassRef.owner.returnType
)
)
)
@@ -358,12 +359,12 @@ class SerializerIrGenerator(val irClass: IrClass, override val compilerContext:
// todo: set properties in external deserialization
var args: List = localProps.map { it.get() }
val ctor: IrConstructorSymbol = if (serializableDescriptor.isInternalSerializable) {
- val ctorDesc = compilerContext.symbolTable.referenceClass(serializableDescriptor)
+ val ctorDesc = compilerContext.externalSymbols.referenceClass(serializableDescriptor)
.owner.constructors.single { it.origin == SERIALIZABLE_PLUGIN_ORIGIN }
args = listOf(irGet(bitMasks[0])) + args + irNull()
ctorDesc.symbol
} else {
- compilerContext.symbolTable.referenceConstructor(serializableDescriptor.unsubstitutedPrimaryConstructor!!)
+ compilerContext.externalSymbols.referenceConstructor(serializableDescriptor.unsubstitutedPrimaryConstructor!!)
}
+irReturn(irInvoke(null, ctor, *args.toTypedArray()))
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt
index 9cc3b2b07b7..23af5c4ae90 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/js/SerializerJsTranslator.kt
@@ -41,9 +41,9 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.*
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.SERIAL_DESCRIPTOR_CLASS_IMPL
import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.typeArgPrefix
-class SerializerJsTranslator(declaration: KtPureClassOrObject,
+class SerializerJsTranslator(descriptor: ClassDescriptor,
val translator: DeclarationBodyVisitor,
- val context: TranslationContext) : SerializerCodegen(declaration, context.bindingContext()) {
+ val context: TranslationContext) : SerializerCodegen(descriptor, context.bindingContext()) {
private fun generateFunction(descriptor: FunctionDescriptor, bodyGen: JsBlockBuilder.(JsFunction, TranslationContext) -> Unit) {
val f = context.buildFunction(descriptor, bodyGen)
@@ -362,7 +362,7 @@ class SerializerJsTranslator(declaration: KtPureClassOrObject,
companion object {
fun translate(declaration: KtPureClassOrObject, descriptor: ClassDescriptor, translator: DeclarationBodyVisitor, context: TranslationContext) {
if (getSerializableClassDescriptorBySerializer(descriptor) != null)
- SerializerJsTranslator(declaration, translator, context).generate()
+ SerializerJsTranslator(descriptor, translator, context).generate()
}
}
}
\ No newline at end of file
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt
index c91348f3849..1277d72ef7f 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/backend/jvm/SerializerCodegenImpl.kt
@@ -32,7 +32,7 @@ import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter
class SerializerCodegenImpl(
private val codegen: ImplementationBodyCodegen,
serializableClass: ClassDescriptor
-) : SerializerCodegen(codegen.myClass, codegen.bindingContext) {
+) : SerializerCodegen(codegen.descriptor, codegen.bindingContext) {
private val serialDescField = "\$\$serialDesc"
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt
index 89b79b98241..9b3a73cab85 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/extensions/SerializationComponentRegistrar.kt
@@ -17,6 +17,7 @@
package org.jetbrains.kotlinx.serialization.compiler.extensions
import com.intellij.mock.MockProject
+import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.codegen.extensions.ExpressionCodegenExtension
import org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar
import org.jetbrains.kotlin.config.CompilerConfiguration
@@ -28,5 +29,6 @@ class SerializationComponentRegistrar : ComponentRegistrar {
ExpressionCodegenExtension.registerExtension(project, SerializationCodegenExtension())
SyntheticResolveExtension.registerExtension(project, SerializationResolveExtension())
JsSyntheticTranslateExtension.registerExtension(project, SerializationJsExtension())
+ IrGenerationExtension.registerExtension(project, SerializationLoweringExtension())
}
}
\ No newline at end of file
diff --git a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt
index b488fff0734..d9d6cb2a940 100644
--- a/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt
+++ b/plugins/kotlin-serialization/kotlin-serialization-compiler/src/org/jetbrains/kotlinx/serialization/compiler/resolve/NamingConventions.kt
@@ -33,9 +33,9 @@ object SerialEntityNames {
val IMPL_NAME = Name.identifier("Impl")
const val ENCODER_CLASS = "Encoder"
- const val STRUCTURE_ENCODER_CLASS = "CompositeEncoder"
+ const val STRUCTURE_ENCODER_CLASS = "StructureEncoder"
const val DECODER_CLASS = "Decoder"
- const val STRUCTURE_DECODER_CLASS = "CompositeDecoder"
+ const val STRUCTURE_DECODER_CLASS = "StructureDecoder"
const val SERIAL_SAVER_CLASS = "SerializationStrategy"
const val SERIAL_LOADER_CLASS = "DeserializationStrategy"
@@ -75,8 +75,8 @@ object CallingConventions {
const val decode = "decode"
const val update = "update"
const val encode = "encode"
- const val decodeElementIndex = "decodeElementIndex"
- const val elementPostfix = "Element"
+ const val decodeElementIndex = "decodeElement"
+ const val elementPostfix = "ElementValue"
const val addElement = "addElement"
const val addAnnotation = "pushAnnotation"