diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt index 0f49105932c..a047ab96c0c 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/SupertypeUtils.kt @@ -64,7 +64,7 @@ fun collectSymbolsForType(type: ConeKotlinType, useSiteSession: FirSession): Lis } fun lookupSuperTypes( - symbols: List>, + symbols: List>, lookupInterfaces: Boolean, deep: Boolean, useSiteSession: FirSession, @@ -161,7 +161,7 @@ fun FirClass.isThereLoopInSupertypes(session: FirSession): Boolean { } fun lookupSuperTypes( - symbol: FirClassifierSymbol<*>, + symbol: FirClassLikeSymbol<*>, lookupInterfaces: Boolean, deep: Boolean, useSiteSession: FirSession @@ -231,7 +231,7 @@ private fun ConeClassLikeType.computePartialExpansion( supertypeSupplier: SupertypeSupplier ): ConeClassLikeType = fullyExpandedType(useSiteSession) { supertypeSupplier.expansionForTypeAlias(it, useSiteSession) } -private fun FirClassifierSymbol<*>.collectSuperTypes( +private fun FirClassLikeSymbol<*>.collectSuperTypes( list: MutableList, visitedSymbols: MutableSet>, deep: Boolean, @@ -287,7 +287,6 @@ private fun FirClassifierSymbol<*>.collectSuperTypes( expansion.lookupTag.toSymbol(useSiteSession) ?.collectSuperTypes(list, visitedSymbols, deep, lookupInterfaces, substituteSuperTypes, useSiteSession, supertypeSupplier) } - else -> error("?!id:1") } } diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt index 0e9ec4c449d..51ca5dad8d0 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/resolve/calls/Synthetics.kt @@ -15,8 +15,10 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator import org.jetbrains.kotlin.fir.scopes.* import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirSyntheticPropertySymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.name.CallableId @@ -277,7 +279,7 @@ class FirSyntheticPropertiesScope private constructor( */ private fun isJavaTypeOnThePath(baseType: ConeSimpleKotlinType?): Boolean { val lookupTagToStop = (baseType as? ConeLookupTagBasedType)?.lookupTag ?: return false - val dispatchReceiverClass = (dispatchReceiverType as? ConeLookupTagBasedType)?.lookupTag?.toSymbol(session) ?: return false + val dispatchReceiverClassSymbol = (dispatchReceiverType as? ConeLookupTagBasedType)?.lookupTag?.toSymbol(session) ?: return false val typeContext = session.typeContext fun checkType(type: ConeClassLikeType): Boolean { @@ -294,10 +296,17 @@ class FirSyntheticPropertiesScope private constructor( return true } - val superTypes = lookupSuperTypes(dispatchReceiverClass, lookupInterfaces = true, deep = true, session) - for (superType in superTypes) { - if (checkType(superType)) return true + when (dispatchReceiverClassSymbol) { + is FirClassLikeSymbol -> { + val superTypes = lookupSuperTypes(dispatchReceiverClassSymbol, lookupInterfaces = true, deep = true, session) + for (superType in superTypes) { + if (checkType(superType)) return true + } + return false + } + is FirTypeParameterSymbol -> { + error("Type parameter symbol ${dispatchReceiverClassSymbol.name} is not expected here") + } } - return false } }