From c09fe3ea6f46886a98b9e607fb2ecad2e79e5490 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Wed, 24 Feb 2021 15:16:55 +0300 Subject: [PATCH] FIR: Optimize unnecessary interface casts by adding relevant overload --- .../kotlin/fir/signaturer/FirBasedSignatureComposer.kt | 2 +- .../tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt index 31bce5491f1..d9fd8ee6027 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/signaturer/FirBasedSignatureComposer.kt @@ -61,7 +61,7 @@ class FirBasedSignatureComposer(private val mangler: FirMangler) : Fir2IrSignatu if (declaration is FirRegularClass && declaration.classId.isLocal) return null if (declaration is FirCallableMemberDeclaration<*>) { if (declaration.visibility == Visibilities.Local) return null - if (declaration.symbol.dispatchReceiverClassOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true) return null + if (declaration.dispatchReceiverClassOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true) return null } val builder = SignatureBuilder() try { diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt index 566ffa8166b..80459211a26 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/ClassMembers.kt @@ -15,8 +15,10 @@ import org.jetbrains.kotlin.fir.types.ConeIntersectionType fun FirCallableSymbol<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? = (fir as? FirCallableMemberDeclaration<*>)?.dispatchReceiverClassOrNull() -fun FirCallableDeclaration<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? { - if (this !is FirCallableMemberDeclaration<*>) return null +fun FirCallableDeclaration<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? = + (this as? FirCallableMemberDeclaration<*>)?.dispatchReceiverClassOrNull() + +fun FirCallableMemberDeclaration<*>.dispatchReceiverClassOrNull(): ConeClassLikeLookupTag? { if (dispatchReceiverType is ConeIntersectionType && isIntersectionOverride) return symbol.baseForIntersectionOverride!!.fir.dispatchReceiverClassOrNull() return (dispatchReceiverType as? ConeClassLikeType)?.lookupTag @@ -27,6 +29,10 @@ fun FirCallableDeclaration<*>.containingClass(): ConeClassLikeLookupTag? { return (containingClassAttr ?: dispatchReceiverClassOrNull()) } +fun FirCallableMemberDeclaration<*>.containingClass(): ConeClassLikeLookupTag? { + return (containingClassAttr ?: dispatchReceiverClassOrNull()) +} + private object ContainingClassKey : FirDeclarationDataKey() var FirCallableDeclaration<*>.containingClassAttr: ConeClassLikeLookupTag? by FirDeclarationDataRegistry.data(ContainingClassKey)