[ANDROID] Move Parcelize plugin to general IrGenerationExtension API

This commit is contained in:
Roman Artemev
2020-05-26 12:52:46 +03:00
committed by romanart
parent adba0a03a6
commit 6f2972ee8b
3 changed files with 16 additions and 15 deletions
@@ -7,15 +7,15 @@ package org.jetbrains.kotlin.android.parcel
import org.jetbrains.kotlin.android.parcel.ir.AndroidSymbols
import org.jetbrains.kotlin.android.parcel.ir.ParcelableIrTransformer
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.extensions.IrGenerationExtension
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.ir.declarations.IrModuleFragment
@Suppress("DEPRECATION_ERROR")
class ParcelableIrGeneratorExtension : org.jetbrains.kotlin.backend.common.extensions.PureIrGenerationExtension {
override fun generate(moduleFragment: IrModuleFragment, context: CommonBackendContext) {
val arrayOfNulls = context.ir.symbols.arrayOfNulls
val charSequence = context.ir.symbols.charSequence
val androidSymbols = AndroidSymbols(context.irBuiltIns, arrayOfNulls, charSequence, moduleFragment)
ParcelableIrTransformer(context, androidSymbols).transform(moduleFragment)
class ParcelableIrGeneratorExtension : IrGenerationExtension {
override fun generate(moduleFragment: IrModuleFragment, pluginContext: IrPluginContext) {
val arrayOfNulls = pluginContext.symbols.arrayOfNulls
val charSequence = pluginContext.symbols.charSequence
val androidSymbols = AndroidSymbols(pluginContext.irBuiltIns, arrayOfNulls, charSequence, moduleFragment)
ParcelableIrTransformer(pluginContext, androidSymbols).transform(moduleFragment)
}
}
@@ -9,9 +9,9 @@ import org.jetbrains.kotlin.android.parcel.ANDROID_PARCELABLE_CLASS_FQNAME
import org.jetbrains.kotlin.android.parcel.PARCELER_FQNAME
import org.jetbrains.kotlin.android.parcel.ParcelableSyntheticComponent
import org.jetbrains.kotlin.android.parcel.serializers.ParcelableExtensionBase
import org.jetbrains.kotlin.backend.common.CommonBackendContext
import org.jetbrains.kotlin.backend.common.extensions.IrPluginContext
import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclarationWithWrappedDescriptor
import org.jetbrains.kotlin.backend.common.lower.createIrBuilder
import org.jetbrains.kotlin.backend.common.lower.DeclarationIrBuilder
import org.jetbrains.kotlin.backend.jvm.ir.erasedUpperBound
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.descriptors.Modality
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.ir.expressions.IrCall
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl
import org.jetbrains.kotlin.ir.symbols.IrFunctionSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.*
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.ir.visitors.IrElementTransformerVoid
@@ -34,13 +35,16 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class ParcelableIrTransformer(private val context: CommonBackendContext, private val androidSymbols: AndroidSymbols) :
class ParcelableIrTransformer(private val context: IrPluginContext, private val androidSymbols: AndroidSymbols) :
ParcelableExtensionBase, IrElementVisitorVoid {
private val serializerFactory = IrParcelSerializerFactory(androidSymbols)
private val deferredOperations = mutableListOf<() -> Unit>()
private fun defer(block: () -> Unit) = deferredOperations.add(block)
private fun IrPluginContext.createIrBuilder(symbol: IrSymbol) =
DeclarationIrBuilder(this, symbol, symbol.owner.startOffset, symbol.owner.endOffset)
private val symbolMap = mutableMapOf<IrFunctionSymbol, IrFunctionSymbol>()
fun transform(moduleFragment: IrModuleFragment) {
@@ -104,10 +104,7 @@ class AndroidComponentRegistrar : ComponentRegistrar {
companion object {
fun registerParcelExtensions(project: Project) {
ExpressionCodegenExtension.registerExtension(project, ParcelableCodegenExtension())
@Suppress("DEPRECATION_ERROR")
org.jetbrains.kotlin.backend.common.extensions.PureIrGenerationExtension.registerExtension(
project, ParcelableIrGeneratorExtension()
)
IrGenerationExtension.registerExtension(project, ParcelableIrGeneratorExtension())
SyntheticResolveExtension.registerExtension(project, ParcelableResolveExtension())
ClassBuilderInterceptorExtension.registerExtension(project, ParcelableClinitClassBuilderInterceptorExtension())
}