[ANDROID] Simplify parcelize ir plugin code
- avoid direct usages of CommonBackendContext & Backend Symbols
This commit is contained in:
+4
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
+6
-8
@@ -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<CommonBackendContext> = 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
|
||||
|
||||
+1
-1
@@ -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 }
|
||||
|
||||
|
||||
+1
-1
@@ -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))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user