From 19e352a1b531744129f8b96dc86c36a2dfb4d58f Mon Sep 17 00:00:00 2001 From: Roman Artemev Date: Fri, 8 May 2020 11:25:41 +0300 Subject: [PATCH] [ANDROID] Simplify parcelize ir plugin code - avoid direct usages of CommonBackendContext & Backend Symbols --- .../parcel/ParcelableIrGeneratorExtension.kt | 5 ++++- .../kotlin/android/parcel/ir/AndroidSymbols.kt | 14 ++++++-------- .../android/parcel/ir/IrParcelSerializers.kt | 2 +- .../android/parcel/ir/ParcelableIrTransformer.kt | 2 +- 4 files changed, 12 insertions(+), 11 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 a58bab9f029..b2099cec6cc 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 @@ -13,6 +13,9 @@ 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) { - ParcelableIrTransformer(context, AndroidSymbols(context, moduleFragment)).transform(moduleFragment) + 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) } } diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt index 2c640638bc6..ad18e213669 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/AndroidSymbols.kt @@ -30,13 +30,11 @@ import org.jetbrains.kotlin.name.Name // hence contain just enough information to produce correct JVM bytecode for *calls*. In particular, we omit generic types and // supertypes, which are not needed to produce correct bytecode. class AndroidSymbols( - context: CommonBackendContext, + val irBuiltIns: IrBuiltIns, + val arrayOfNulls: IrSimpleFunctionSymbol, + private val charSequence: IrClassSymbol, private val moduleFragment: IrModuleFragment ) { - val irBuiltIns: IrBuiltIns = context.irBuiltIns - - val irSymbols: Symbols = context.ir.symbols - private val androidOs: IrPackageFragment = createPackage("android.os") private val androidText: IrPackageFragment = createPackage("android.text") @@ -117,7 +115,7 @@ class AndroidSymbols( modality = Modality.ABSTRACT }.apply { createImplicitParameterDeclarationWithWrappedDescriptor() - val t = addTypeParameter("T", context.irBuiltIns.anyNType) + val t = addTypeParameter("T", irBuiltIns.anyNType) parent = androidOsParcelable.owner addFunction("createFromParcel", t.defaultType, Modality.ABSTRACT).apply { @@ -128,7 +126,7 @@ class AndroidSymbols( "newArray", irBuiltIns.arrayClass.typeWith(t.defaultType.makeNullable()), Modality.ABSTRACT ).apply { - addValueParameter("size", context.irBuiltIns.intType) + addValueParameter("size", irBuiltIns.intType) } }.symbol @@ -386,7 +384,7 @@ class AndroidSymbols( val textUtilsWriteToParcel: IrSimpleFunctionSymbol = androidTextTextUtils.owner.addFunction("writeToParcel", irBuiltIns.unitType, isStatic = true).apply { - addValueParameter("cs", irSymbols.charSequence.defaultType) + addValueParameter("cs", charSequence.defaultType) addValueParameter("p", androidOsParcel.defaultType) addValueParameter("parcelableFlags", irBuiltIns.intType) }.symbol diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt index 57541e3af60..e389ca1d3f7 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt @@ -216,7 +216,7 @@ class IrArrayParcelSerializer( ) : IrParcelSerializer { private fun AndroidIrBuilder.newArray(size: IrExpression): IrExpression { val arrayConstructor: IrFunctionSymbol = if (arrayType.isBoxedArray) - androidSymbols.irSymbols.arrayOfNulls + androidSymbols.arrayOfNulls else arrayType.classOrNull!!.constructors.single { it.owner.valueParameters.size == 1 } 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 20f1c3f0834..2fdc88ba1f4 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 @@ -190,7 +190,7 @@ class ParcelableIrTransformer(private val context: CommonBackendContext, private body = context.createIrBuilder(symbol).run { irExprBody( parcelerNewArray(parcelerObject, sizeParameter) - ?: irCall(androidSymbols.irSymbols.arrayOfNulls, arrayType).apply { + ?: irCall(androidSymbols.arrayOfNulls, arrayType).apply { putTypeArgument(0, arrayType) putValueArgument(0, irGet(sizeParameter)) }