From 0d8d91f803b214cc8daf9d9695ebd60e9968065b Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 1 Nov 2022 14:42:29 +0100 Subject: [PATCH] Remove unsafe cast function usages from compiler plugins --- build.gradle.kts | 5 ----- .../android/parcel/ir/ParcelableIrTransformer.kt | 5 ++--- .../android/synthetic/codegen/AndroidIrExtension.kt | 4 ++-- .../kotlin/jvm/abi/JvmAbiClassBuilderInterceptor.kt | 5 ++--- .../compiler/backend/ir/SerializerIrGenerator.kt | 12 ++++++++---- .../kotlin/parcelize/ir/ParcelizeIrTransformer.kt | 5 ++--- .../kotlin/parcelize/ParcelizeDeclarationChecker.kt | 3 +-- 7 files changed, 17 insertions(+), 22 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index d9ec1f0fb3c..db7940cb447 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -381,11 +381,6 @@ val projectsWithOptInToUnsafeCastFunctionsFromAddToStdLib by extra { ":kotlin-reflect-api", ":kotlin-scripting-jvm-host-test", ":native:kotlin-klib-commonizer", - ":plugins:android-extensions-compiler", - ":plugins:jvm-abi-gen", - ":plugins:parcelize:parcelize-compiler:parcelize.k1", - ":plugins:parcelize:parcelize-compiler:parcelize.backend", - ":kotlinx-serialization-compiler-plugin.backend", ) } 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 a4dd03cd631..604209c6d14 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 @@ -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()?.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()?.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) diff --git a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt index 174d457ee56..f0effe3d7a4 100644 --- a/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt +++ b/plugins/android-extensions/android-extensions-compiler/src/org/jetbrains/kotlin/android/synthetic/codegen/AndroidIrExtension.kt @@ -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()?.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 diff --git a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiClassBuilderInterceptor.kt b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiClassBuilderInterceptor.kt index 77a95ef601a..45e4f00e42c 100644 --- a/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiClassBuilderInterceptor.kt +++ b/plugins/jvm-abi-gen/src/org/jetbrains/kotlin/jvm/abi/JvmAbiClassBuilderInterceptor.kt @@ -10,9 +10,9 @@ import org.jetbrains.kotlin.codegen.ClassBuilder import org.jetbrains.kotlin.codegen.ClassBuilderFactory import org.jetbrains.kotlin.codegen.DelegatingClassBuilder import org.jetbrains.kotlin.codegen.DelegatingClassBuilderFactory -import org.jetbrains.kotlin.codegen.`when`.WhenByEnumsMapping import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension import org.jetbrains.kotlin.codegen.inline.coroutines.FOR_INLINE_SUFFIX +import org.jetbrains.kotlin.codegen.`when`.WhenByEnumsMapping import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DescriptorVisibilities import org.jetbrains.kotlin.descriptors.FunctionDescriptor @@ -21,7 +21,6 @@ import org.jetbrains.kotlin.diagnostics.DiagnosticSink import org.jetbrains.kotlin.load.java.JvmAnnotationNames import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.jvm.diagnostics.JvmDeclarationOrigin -import org.jetbrains.kotlin.utils.addToStdlib.safeAs import org.jetbrains.org.objectweb.asm.AnnotationVisitor import org.jetbrains.org.objectweb.asm.MethodVisitor import org.jetbrains.org.objectweb.asm.Opcodes @@ -148,7 +147,7 @@ class JvmAbiClassBuilderInterceptor : ClassBuilderInterceptorExtension { } // Copy inline functions verbatim - if (origin.descriptor?.safeAs()?.isInline == true && !isPrivateClass) { + if ((origin.descriptor as? FunctionDescriptor)?.isInline == true && !isPrivateClass) { methodInfos[Method(name, desc)] = AbiMethodInfo.KEEP } else { methodInfos[Method(name, desc)] = AbiMethodInfo.STRIP diff --git a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt index b6cc568bbca..5e25807f123 100644 --- a/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt +++ b/plugins/kotlinx-serialization/kotlinx-serialization.backend/src/org/jetbrains/kotlinx/serialization/compiler/backend/ir/SerializerIrGenerator.kt @@ -15,7 +15,9 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor import org.jetbrains.kotlin.ir.builders.* import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.deepCopyWithVariables -import org.jetbrains.kotlin.ir.expressions.* +import org.jetbrains.kotlin.ir.expressions.IrConstructorCall +import org.jetbrains.kotlin.ir.expressions.IrExpression +import org.jetbrains.kotlin.ir.expressions.IrExpressionBody import org.jetbrains.kotlin.ir.expressions.impl.IrBranchImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrDelegatingConstructorCallImpl @@ -28,10 +30,10 @@ import org.jetbrains.kotlin.ir.util.* import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.util.OperatorNameConventions -import org.jetbrains.kotlin.utils.addToStdlib.cast import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationDescriptorSerializerPlugin import org.jetbrains.kotlinx.serialization.compiler.extensions.SerializationPluginContext -import org.jetbrains.kotlinx.serialization.compiler.resolve.* +import org.jetbrains.kotlinx.serialization.compiler.resolve.CallingConventions +import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.CACHED_CHILD_SERIALIZERS_PROPERTY_NAME import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.DECODER_CLASS import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.ENCODER_CLASS @@ -41,6 +43,8 @@ import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.SA import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.STRUCTURE_DECODER_CLASS import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.STRUCTURE_ENCODER_CLASS import org.jetbrains.kotlinx.serialization.compiler.resolve.SerialEntityNames.UNKNOWN_FIELD_EXC +import org.jetbrains.kotlinx.serialization.compiler.resolve.SerializationPackages +import org.jetbrains.kotlinx.serialization.compiler.resolve.bitMaskSlotCount object SERIALIZATION_PLUGIN_ORIGIN : IrDeclarationOriginImpl("KOTLINX_SERIALIZATION", true) @@ -275,7 +279,7 @@ open class SerializerIrGenerator( if (writeSelfFunction != null) { // extract Tx from KSerializer list val typeArgs = - localSerializersFieldsDescriptors.map { ir -> ir.backingField!!.type.cast().arguments.single().typeOrNull } + localSerializersFieldsDescriptors.map { ir -> (ir.backingField!!.type as IrSimpleType).arguments.single().typeOrNull } val args = mutableListOf(irGet(objectToSerialize), irGet(localOutput), irGet(localSerialDesc)) args.addAll(localSerializersFieldsDescriptors.map { ir -> irGetField( diff --git a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt index 02d860f8905..675d475d4a1 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.backend/src/org/jetbrains/kotlin/parcelize/ir/ParcelizeIrTransformer.kt @@ -36,7 +36,6 @@ import org.jetbrains.kotlin.parcelize.ParcelizeNames.PARCELABLE_FQN import org.jetbrains.kotlin.parcelize.ParcelizeNames.PARCELER_FQN import org.jetbrains.kotlin.parcelize.ParcelizeNames.WRITE_TO_PARCEL_NAME import org.jetbrains.kotlin.parcelize.ParcelizeSyntheticComponent -import org.jetbrains.kotlin.utils.addToStdlib.safeAs @OptIn(ObsoleteDescriptorBasedAPI::class) class ParcelizeIrTransformer( @@ -141,7 +140,7 @@ class ParcelizeIrTransformer( } declaration.functions.find { - it.descriptor.safeAs()?.componentKind == ParcelizeSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS + (it.descriptor as? ParcelizeSyntheticComponent)?.componentKind == ParcelizeSyntheticComponent.ComponentKind.DESCRIBE_CONTENTS }?.let { stub -> symbolMap[stub.symbol] = describeContents.symbol declaration.declarations.remove(stub) @@ -178,7 +177,7 @@ class ParcelizeIrTransformer( } declaration.functions.find { - it.descriptor.safeAs()?.componentKind == ParcelizeSyntheticComponent.ComponentKind.WRITE_TO_PARCEL + (it.descriptor as? ParcelizeSyntheticComponent)?.componentKind == ParcelizeSyntheticComponent.ComponentKind.WRITE_TO_PARCEL }?.let { stub -> symbolMap[stub.symbol] = writeToParcel.symbol declaration.declarations.remove(stub) diff --git a/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt index 510e9162479..4496221a096 100644 --- a/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt +++ b/plugins/parcelize/parcelize-compiler/parcelize.k1/src/org/jetbrains/kotlin/parcelize/ParcelizeDeclarationChecker.kt @@ -31,7 +31,6 @@ import org.jetbrains.kotlin.types.TypeUtils import org.jetbrains.kotlin.types.isError import org.jetbrains.kotlin.types.typeUtil.representativeUpperBound import org.jetbrains.kotlin.types.typeUtil.supertypes -import org.jetbrains.kotlin.utils.addToStdlib.safeAs open class ParcelizeDeclarationChecker : DeclarationChecker { private companion object { @@ -290,7 +289,7 @@ open class ParcelizeDeclarationChecker : DeclarationChecker { } private fun KotlinType.getErasedUpperBound(): KotlinType = - constructor.declarationDescriptor?.safeAs()?.representativeUpperBound?.getErasedUpperBound() + (constructor.declarationDescriptor as? TypeParameterDescriptor)?.representativeUpperBound?.getErasedUpperBound() ?: this private fun ClassDescriptor.hasCustomParceler(): Boolean {