FIR2IR: Simplify Fir2IrImplicitCastInserter

This commit is contained in:
Denis.Zharkov
2021-01-27 16:25:07 +03:00
parent aab85121e2
commit 71596a08b3
@@ -22,7 +22,9 @@ import org.jetbrains.kotlin.fir.resolve.scope
import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator import org.jetbrains.kotlin.fir.scopes.FakeOverrideTypeCalculator
import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirTypeScope
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirFunctionSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol
import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
import org.jetbrains.kotlin.ir.IrElement import org.jetbrains.kotlin.ir.IrElement
@@ -299,8 +301,7 @@ class Fir2IrImplicitCastInserter(
return implicitCastOrExpression(value, castTypeRef) return implicitCastOrExpression(value, castTypeRef)
} }
val originalTypeRef = expressionWithSmartcast.originalType if (castTypeRef is FirResolvedTypeRef) {
if (castTypeRef is FirResolvedTypeRef && originalTypeRef is FirResolvedTypeRef) {
val castType = castTypeRef.type val castType = castTypeRef.type
if (castType is ConeIntersectionType) { if (castType is ConeIntersectionType) {
val unwrappedSymbol = (referencedSymbol as? FirCallableSymbol)?.baseForIntersectionOverride ?: referencedSymbol val unwrappedSymbol = (referencedSymbol as? FirCallableSymbol)?.baseForIntersectionOverride ?: referencedSymbol
@@ -311,15 +312,7 @@ class Fir2IrImplicitCastInserter(
} }
} }
} }
return if (originalExpression is FirThisReceiverExpression && return implicitCastOrExpression(value, castTypeRef.toIrType())
originalExpression.calleeReference.boundSymbol is FirAnonymousFunctionSymbol
) {
// If the original is a "this" in a local function and original.type is the same as castType,
// we still want to keep the cast. See kt-42517
implicitCast(value, castTypeRef.toIrType())
} else {
implicitCastOrExpression(value, castTypeRef.toIrType())
}
} }
private fun ConeKotlinType.doesContainReferencedSymbolInScope( private fun ConeKotlinType.doesContainReferencedSymbolInScope(