FIR: ensure type ref transformed by type resolve transformer is resolved

This commit is contained in:
Jinseong Jeon
2021-02-08 23:23:47 -08:00
committed by Mikhail Glukhikh
parent 52ea7fdb72
commit fbb19e3b50
2 changed files with 8 additions and 5 deletions
@@ -38,12 +38,15 @@ class FirSpecificTypeResolverTransformer(
}
}
override fun transformTypeRef(typeRef: FirTypeRef, data: FirScope): CompositeTransformResult<FirTypeRef> {
override fun transformTypeRef(typeRef: FirTypeRef, data: FirScope): CompositeTransformResult<FirResolvedTypeRef> {
typeRef.transformChildren(this, data)
return transformType(typeRef, typeResolver.resolveType(typeRef, data, areBareTypesAllowed))
}
override fun transformFunctionTypeRef(functionTypeRef: FirFunctionTypeRef, data: FirScope): CompositeTransformResult<FirTypeRef> {
override fun transformFunctionTypeRef(
functionTypeRef: FirFunctionTypeRef,
data: FirScope
): CompositeTransformResult<FirResolvedTypeRef> {
functionTypeRef.transformChildren(this, data)
val resolvedType = typeResolver.resolveType(functionTypeRef, data, areBareTypesAllowed).takeIfAcceptable()
return if (resolvedType != null && resolvedType !is ConeClassErrorType) {
@@ -62,11 +65,11 @@ class FirSpecificTypeResolverTransformer(
}.compose()
}
private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirTypeRef> {
private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirResolvedTypeRef> {
return if (resolvedType !is ConeClassErrorType) {
buildResolvedTypeRef {
source = typeRef.source
type = resolvedType.takeIfAcceptable() ?: return typeRef.compose()
type = resolvedType
annotations += typeRef.annotations
delegatedTypeRef = typeRef
}
@@ -168,7 +168,7 @@ class FirTypeResolveTransformer(
return implicitTypeRef.compose()
}
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
override fun transformTypeRef(typeRef: FirTypeRef, data: Nothing?): CompositeTransformResult<FirResolvedTypeRef> {
return typeRef.transform(typeResolverTransformer, towerScope)
}