IR: remove some usages of deepCopyWithVariables

At this point, `deepCopyWithVariables` is the same as
`deepCopyWithSymbols` except that the former doesn't call
`patchDeclarationParents`, which most likely produces incorrect IR in
some call sites.
This commit is contained in:
Alexander Udalov
2024-03-07 14:05:14 +01:00
committed by Space Team
parent e7e8cba1b4
commit 1d38c01afc
8 changed files with 28 additions and 43 deletions
@@ -676,10 +676,7 @@ abstract class BaseIrGenerator(private val currentClass: IrClass, final override
val enumEntries = enumDescriptor.owner.enumEntries()
val entriesNames = enumEntries.map { it.annotations.serialNameValue?.let { n -> irString(n) } ?: irNull() }
val entriesAnnotations = enumEntries.map {
val annotationConstructors = it.annotations.map { a ->
a.deepCopyWithVariables()
}
val annotationsConstructors = copyAnnotationsFrom(annotationConstructors)
val annotationsConstructors = copyAnnotationsFrom(it.annotations)
if (annotationsConstructors.isEmpty()) {
irNull()
} else {
@@ -687,10 +684,7 @@ abstract class BaseIrGenerator(private val currentClass: IrClass, final override
}
}
val classAnnotationConstructors = enumDescriptor.owner.annotations.map { a ->
a.deepCopyWithVariables()
}
val classAnnotationsConstructors = copyAnnotationsFrom(classAnnotationConstructors)
val classAnnotationsConstructors = copyAnnotationsFrom(enumDescriptor.owner.annotations)
val classAnnotations = if (classAnnotationsConstructors.isEmpty()) {
irNull()
} else {
@@ -8,21 +8,29 @@ package org.jetbrains.kotlinx.serialization.compiler.backend.ir
import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.builtins.KotlinBuiltIns
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.DescriptorVisibilities
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
import org.jetbrains.kotlin.descriptors.Modality
import org.jetbrains.kotlin.ir.IrElement
import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI
import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.builders.declarations.*
import org.jetbrains.kotlin.ir.builders.declarations.addGetter
import org.jetbrains.kotlin.ir.builders.declarations.addProperty
import org.jetbrains.kotlin.ir.builders.declarations.buildField
import org.jetbrains.kotlin.ir.builders.declarations.buildFun
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.deepCopyWithVariables
import org.jetbrains.kotlin.ir.expressions.*
import org.jetbrains.kotlin.ir.expressions.impl.*
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.impl.*
import org.jetbrains.kotlin.ir.symbols.impl.IrAnonymousInitializerSymbolImpl
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.*
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.platform.jvm.isJvm
import org.jetbrains.kotlin.resolve.jvm.JvmPrimitiveType
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginContext
@@ -424,11 +432,7 @@ interface IrBuilderWithPluginContext {
}
fun IrBuilderWithScope.copyAnnotationsFrom(annotations: List<IrConstructorCall>): List<IrExpression> =
annotations.mapNotNull { annotationCall ->
val annotationClass = annotationCall.symbol.owner.parentAsClass
if (!annotationClass.isSerialInfoAnnotation) return@mapNotNull null
annotationCall.deepCopyWithVariables()
}
annotations.filter { it.symbol.owner.parentAsClass.isSerialInfoAnnotation }.map { it.deepCopyWithVariables() }
@OptIn(ObsoleteDescriptorBasedAPI::class)
fun IrBuilderWithScope.wrapperClassReference(classType: IrType): IrClassReference {
@@ -11,15 +11,11 @@ import org.jetbrains.kotlin.ir.builders.*
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrSimpleFunction
import org.jetbrains.kotlin.ir.declarations.IrVariable
import org.jetbrains.kotlin.ir.deepCopyWithVariables
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.util.constructors
import org.jetbrains.kotlin.ir.util.defaultType
import org.jetbrains.kotlin.ir.util.functions
import org.jetbrains.kotlin.ir.util.properties
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginContext
import org.jetbrains.kotlinx.serialization.compiler.resolve.CallingConventions
@@ -101,7 +97,7 @@ class SerializerForEnumsGenerator(
+call
// serialDesc.pushAnnotation(...)
copySerialInfoAnnotationsToDescriptor(
entry.annotations.map {it.deepCopyWithVariables()},
entry.copyAnnotations(),
localDescriptor,
serialDescImplClass.functionByName(CallingConventions.addAnnotation)
)