FIR: Support function type resolve #KT-24092 Fixed

This commit is contained in:
Simon Ogorodnik
2018-03-23 19:02:56 +03:00
committed by Mikhail Glukhikh
parent 0ea1a5b30f
commit 4fb321fa00
10 changed files with 129 additions and 11 deletions
@@ -105,7 +105,14 @@ class FirTypeResolverImpl : FirTypeResolver {
is FirErrorType -> {
ConeKotlinErrorType(type.reason)
}
is FirFunctionType, is FirDynamicType, is FirImplicitType, is FirDelegatedType -> {
is FirFunctionType -> {
ConeFunctionTypeImpl(
(type.receiverType as FirResolvedType?)?.type,
type.valueParameters.map { it.returnType.coneTypeUnsafe<ConeKotlinType>() },
type.returnType.coneTypeUnsafe()
)
}
is FirDynamicType, is FirImplicitType, is FirDelegatedType -> {
ConeKotlinErrorType("Not supported: ${type::class.simpleName}")
}
else -> error("!")
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.transformers
import org.jetbrains.kotlin.descriptors.ClassKind
import org.jetbrains.kotlin.fir.FirElement
import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
import org.jetbrains.kotlin.fir.render
import org.jetbrains.kotlin.fir.resolve.FirProvider
import org.jetbrains.kotlin.fir.resolve.FirTypeResolver
@@ -16,6 +17,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.*
import org.jetbrains.kotlin.fir.symbols.*
import org.jetbrains.kotlin.fir.transformSingle
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.impl.FirResolvedFunctionTypeImpl
import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeImpl
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.FirTransformer
@@ -114,7 +116,18 @@ open class FirTypeResolveTransformer : FirTransformer<Nothing?>() {
}
override fun transformFunctionType(functionType: FirFunctionType, data: Nothing?): CompositeTransformResult<FirType> {
return (functionType.transformChildren(this, data) as FirType).compose()
val typeResolver = FirTypeResolver.getInstance(functionType.session)
functionType.transformChildren(this, data)
return FirResolvedFunctionTypeImpl(
functionType.psi,
functionType.session,
functionType.isNullable,
functionType.annotations as MutableList<FirAnnotationCall>,
functionType.receiverType,
functionType.valueParameters as MutableList<FirValueParameter>,
functionType.returnType,
typeResolver.resolveType(functionType, scope, FirPosition.OTHER)
).compose()
}
private fun transformType(type: FirType, resolvedType: ConeKotlinType): CompositeTransformResult<FirType> {