FIR: Optimize unnecessary interface casts by adding relevant overload

This commit is contained in:
Denis.Zharkov
2021-02-24 15:16:55 +03:00
parent f141c276be
commit c09fe3ea6f
2 changed files with 9 additions and 3 deletions
@@ -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 {
@@ -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)