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:
committed by
Space Team
parent
e7e8cba1b4
commit
1d38c01afc
+2
-8
@@ -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 {
|
||||
|
||||
+13
-9
@@ -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 {
|
||||
|
||||
+2
-6
@@ -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)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user