From 6f2972ee8bfbce7e54cba964e0ae1481932a3fd4 Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Tue, 26 May 2020 12:52:46 +0300 Subject: [PATCH] [ANDROID] Move Parcelize plugin to general `IrGenerationExtension` API --- .../parcel/ParcelableIrGeneratorExtension.kt | 16 ++++++++-------- .../android/parcel/ir/ParcelableIrTransformer.kt | 10 +++++++--- .../synthetic/AndroidComponentRegistrar.kt | 5 +---- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableIrGeneratorExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableIrGeneratorExtension.kt index b2099cec6cc..6f8417199ad 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableIrGeneratorExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ParcelableIrGeneratorExtension.kt @@ -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) } } diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt index 2fdc88ba1f4..ecabd68e3b6 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/ParcelableIrTransformer.kt @@ -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() fun transform(moduleFragment: IrModuleFragment) { diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt index 198d9a1d742..80bf8ec78a9 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/AndroidComponentRegistrar.kt @@ -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()) }