diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt index 3466e3b51c9..9dc4d0809ac 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/ResolveUtils.kt @@ -6,7 +6,8 @@ package org.jetbrains.kotlin.fir.resolve import org.jetbrains.kotlin.descriptors.ClassKind -import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.componentArrayAccessor import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccess import org.jetbrains.kotlin.fir.expressions.FirResolvable @@ -14,9 +15,11 @@ import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.references.FirErrorNamedReference import org.jetbrains.kotlin.fir.references.FirResolvedCallableReference import org.jetbrains.kotlin.fir.references.FirThisReference +import org.jetbrains.kotlin.fir.render import org.jetbrains.kotlin.fir.resolve.calls.FirNamedReferenceWithCandidate import org.jetbrains.kotlin.fir.resolve.substitution.AbstractConeSubstitutor import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.resultType +import org.jetbrains.kotlin.fir.resolvedTypeFromPrototype import org.jetbrains.kotlin.fir.scopes.impl.FirMemberScopeProvider import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType import org.jetbrains.kotlin.fir.symbols.* @@ -205,13 +208,12 @@ fun FirFunction<*>.constructFunctionalTypeRef(session: FirSession): FirResolvedT } val rawReturnType = (this as FirTypedDeclaration).returnTypeRef.coneTypeUnsafe() - val functionalType = createFunctionalType(session, parameters, receiverTypeRef?.coneTypeUnsafe(), rawReturnType) + val functionalType = createFunctionalType(parameters, receiverTypeRef?.coneTypeUnsafe(), rawReturnType) return FirResolvedTypeRefImpl(psi, functionalType) } fun createFunctionalType( - session: FirSession, parameters: List, receiverType: ConeKotlinType?, rawReturnType: ConeKotlinType @@ -219,15 +221,14 @@ fun createFunctionalType( val receiverAndParameterTypes = listOfNotNull(receiverType) + parameters + listOf(rawReturnType) val functionalTypeId = StandardClassIds.byName("Function${receiverAndParameterTypes.size - 1}") - val functionalType = functionalTypeId(session.firSymbolProvider).constructType(receiverAndParameterTypes.toTypedArray(), isNullable = false) - return functionalType + return ConeClassTypeImpl(ConeClassLikeLookupTagImpl(functionalTypeId), receiverAndParameterTypes.toTypedArray(), isNullable = false) } fun BodyResolveComponents.typeForQualifier(resolvedQualifier: FirResolvedQualifier): FirTypeRef { val classId = resolvedQualifier.classId val resultType = resolvedQualifier.resultType if (classId != null) { - val classSymbol: FirClassLikeSymbol<*> = symbolProvider.getClassLikeSymbolByFqName(classId)!! + val classSymbol = symbolProvider.getClassLikeSymbolByFqName(classId)!! val declaration = classSymbol.phasedFir if (declaration is FirClass) { if (declaration.classKind == ClassKind.OBJECT) { @@ -311,8 +312,10 @@ private fun BodyResolveComponents.typeFromSymbol(symbol: AbstractFirBasedSymbol< "no enum item supertype" ) } else - FirResolvedTypeRefImpl(null, symbol.constructType(emptyArray(), isNullable = false)) + FirResolvedTypeRefImpl( + null, symbol.constructType(emptyArray(), isNullable = false) + ) } else -> error("WTF ! $symbol") } -} \ No newline at end of file +} diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt index d1d5c0c92b0..64a43b95216 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/SamResolution.kt @@ -191,7 +191,7 @@ class FirSamResolverImpl( val abstractMethod = firRegularClass.getSingleAbstractMethodOrNull(firSession, scopeSession) ?: return@getOrPut NULL_STUB // TODO: val shouldConvertFirstParameterToDescriptor = samWithReceiverResolvers.any { it.shouldConvertFirstSamParameterToReceiver(abstractMethod) } - abstractMethod.getFunctionTypeForAbstractMethod(firSession) + abstractMethod.getFunctionTypeForAbstractMethod() } as? ConeKotlinType } @@ -292,14 +292,13 @@ private fun FirRegularClass.hasMoreThenOneAbstractFunctionOrHasAbstractProperty( return false } -private fun FirSimpleFunction.getFunctionTypeForAbstractMethod(session: FirSession): ConeLookupTagBasedType { +private fun FirSimpleFunction.getFunctionTypeForAbstractMethod(): ConeLookupTagBasedType { val parameterTypes = valueParameters.map { it.returnTypeRef.coneTypeSafe() ?: ConeKotlinErrorType("No type for parameter $it") } return createFunctionalType( - session, parameterTypes, - receiverType = null, + parameterTypes, receiverType = null, rawReturnType = returnTypeRef.coneTypeSafe() ?: ConeKotlinErrorType("No type for return type of $this") ) }