Remove unsafe cast function usages from compiler plugins

This commit is contained in:
Alexander Udalov
2022-11-01 14:42:29 +01:00
committed by Space Team
parent fd9b19ee49
commit 0d8d91f803
7 changed files with 17 additions and 22 deletions
@@ -36,7 +36,6 @@ import org.jetbrains.kotlin.ir.visitors.IrElementVisitorVoid
import org.jetbrains.kotlin.ir.visitors.transformChildrenVoid
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@OptIn(ObsoleteDescriptorBasedAPI::class)
class ParcelableIrTransformer(private val context: IrPluginContext, private val androidSymbols: AndroidSymbols) :
@@ -128,7 +127,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val
}
declaration.functions.find {
it.descriptor.safeAs<ParcelableSyntheticComponent>()?.componentKind == ParcelableSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS
(it.descriptor as? ParcelableSyntheticComponent)?.componentKind == ParcelableSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS
}?.let { stub ->
symbolMap[stub.symbol] = describeContents.symbol
declaration.declarations.remove(stub)
@@ -183,7 +182,7 @@ class ParcelableIrTransformer(private val context: IrPluginContext, private val
}
declaration.functions.find {
it.descriptor.safeAs<ParcelableSyntheticComponent>()?.componentKind == ParcelableSyntheticComponent.ComponentKind.WRITE_TO_PARCEL
(it.descriptor as? ParcelableSyntheticComponent)?.componentKind == ParcelableSyntheticComponent.ComponentKind.WRITE_TO_PARCEL
}?.let { stub ->
symbolMap[stub.symbol] = writeToParcel.symbol
declaration.declarations.remove(stub)
@@ -43,7 +43,6 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.FqNameUnsafe
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.descriptorUtil.propertyIfAccessor
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
@OptIn(ObsoleteDescriptorBasedAPI::class)
abstract class AndroidIrExtension : IrGenerationExtension {
@@ -54,7 +53,8 @@ abstract class AndroidIrExtension : IrGenerationExtension {
override fun resolveSymbol(symbol: IrSymbol, context: TranslationPluginContext): IrDeclaration? =
if (symbol !is IrSimpleFunctionSymbol ||
(symbol.descriptor !is AndroidSyntheticFunction
&& symbol.descriptor.safeAs<PropertyGetterDescriptor>()?.correspondingProperty !is AndroidSyntheticProperty)) {
&& (symbol.descriptor as? PropertyGetterDescriptor)?.correspondingProperty !is AndroidSyntheticProperty)
) {
super.resolveSymbol(symbol, context)
} else {
// Replace android synthetic functions with stubs, since they are essentially intrinsics and will be replaced in the plugin