From fc141a52dadd2e493c41d6407d355119a281fb58 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Fri, 11 Sep 2020 17:56:31 +0200 Subject: [PATCH] IR: minor, make IrClass.companionObject return IrClass --- .../kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt | 4 ++-- .../src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt | 3 ++- .../jetbrains/kotlin/android/parcel/ir/IrParcelSerializers.kt | 2 +- .../kotlin/android/parcel/ir/ParcelableIrTransformer.kt | 4 ++-- .../src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt | 3 +-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt index d3b36deabda..e4a1dd4e3da 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/SyntheticAccessorLowering.kt @@ -16,9 +16,9 @@ import org.jetbrains.kotlin.backend.jvm.intrinsics.receiverAndArgs import org.jetbrains.kotlin.backend.jvm.ir.IrInlineReferenceLocator import org.jetbrains.kotlin.backend.jvm.lower.inlineclasses.hasMangledParameters import org.jetbrains.kotlin.codegen.syntheticAccessorToSuperSuffix -import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.DescriptorVisibility +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.builders.declarations.addValueParameter @@ -242,7 +242,7 @@ internal class SyntheticAccessorLowering(val context: JvmBackendContext) : IrEle private fun IrDeclarationWithVisibility.accessorParent(parent: IrDeclarationParent = this.parent) = if (visibility == JavaDescriptorVisibilities.PROTECTED_STATIC_VISIBILITY) { val classes = allScopes.map { it.irElement }.filterIsInstance() - val companions = classes.mapNotNull { it.companionObject() }.filterIsInstance() + val companions = classes.mapNotNull(IrClass::companionObject) val objectsInScope = classes.flatMap { it.declarations.filter(IrDeclaration::isAnonymousObject).filterIsInstance() } val candidates = objectsInScope + companions + classes diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt index f30fe88b73d..7dee88d9cb7 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/AdditionalIrUtils.kt @@ -100,7 +100,8 @@ val IrDeclaration.fileEntry: SourceManager.FileEntry } } -fun IrClass.companionObject() = this.declarations.singleOrNull {it is IrClass && it.isCompanion } +fun IrClass.companionObject(): IrClass? = + this.declarations.singleOrNull { it is IrClass && it.isCompanion } as IrClass? val IrDeclaration.isGetter get() = this is IrSimpleFunction && this == this.correspondingPropertySymbol?.owner?.getter 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 2065f7c0193..7f85035c8ce 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 @@ -166,7 +166,7 @@ class IrEfficientParcelableParcelSerializer(private val irClass: IrClass) : IrPa val creator: IrExpression = irClass.fields.find { it.name == CREATOR_NAME }?.let { creatorField -> irGetField(null, creatorField) } ?: irCall(irClass.creatorGetter!!).apply { - dispatchReceiver = irGetObject((irClass.companionObject()!! as IrClass).symbol) + dispatchReceiver = irGetObject(irClass.companionObject()!!.symbol) } return parcelableCreatorCreateFromParcel(creator, irGet(parcel)) 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 c889b9d1853..78b745920a9 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 @@ -14,8 +14,8 @@ import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclaration 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 import org.jetbrains.kotlin.descriptors.DescriptorVisibilities +import org.jetbrains.kotlin.descriptors.Modality import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrStatement import org.jetbrains.kotlin.ir.ObsoleteDescriptorBasedAPI @@ -107,7 +107,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val val parcelableProperties = declaration.parcelableProperties // If the companion extends Parceler, it can override parts of the generated implementation. - val parcelerObject = declaration.companionObject()?.safeAs()?.takeIf { + val parcelerObject = declaration.companionObject()?.takeIf { it.isSubclassOfFqName(PARCELER_FQNAME.asString()) } diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt index ec86b18ccf0..34e38693942 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/parcel/ir/irUtils.kt @@ -26,7 +26,6 @@ import org.jetbrains.kotlin.ir.types.* import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.types.Variance -import org.jetbrains.kotlin.utils.addToStdlib.safeAs // true if the class should be processed by the parcelize plugin val IrClass.isParcelize: Boolean @@ -34,7 +33,7 @@ val IrClass.isParcelize: Boolean // Finds the getter for a pre-existing CREATOR field on the class companion, which is used for manual Parcelable implementations in Kotlin. val IrClass.creatorGetter: IrSimpleFunctionSymbol? - get() = companionObject()?.safeAs()?.getPropertyGetter(CREATOR_NAME.asString())?.takeIf { + get() = companionObject()?.getPropertyGetter(CREATOR_NAME.asString())?.takeIf { it.owner.correspondingPropertySymbol?.owner?.backingField?.hasAnnotation(FqName("kotlin.jvm.JvmField")) == true }