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) typeRef.transformChildren(this, data)
return transformType(typeRef, typeResolver.resolveType(typeRef, data, areBareTypesAllowed)) 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) functionTypeRef.transformChildren(this, data)
val resolvedType = typeResolver.resolveType(functionTypeRef, data, areBareTypesAllowed).takeIfAcceptable() val resolvedType = typeResolver.resolveType(functionTypeRef, data, areBareTypesAllowed).takeIfAcceptable()
return if (resolvedType != null && resolvedType !is ConeClassErrorType) { return if (resolvedType != null && resolvedType !is ConeClassErrorType) {
@@ -62,11 +65,11 @@ class FirSpecificTypeResolverTransformer(
}.compose() }.compose()
} }
private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirTypeRef> { private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirResolvedTypeRef> {
return if (resolvedType !is ConeClassErrorType) { return if (resolvedType !is ConeClassErrorType) {
buildResolvedTypeRef { buildResolvedTypeRef {
source = typeRef.source source = typeRef.source
type = resolvedType.takeIfAcceptable() ?: return typeRef.compose() type = resolvedType
annotations += typeRef.annotations annotations += typeRef.annotations
delegatedTypeRef = typeRef delegatedTypeRef = typeRef
} }
@@ -168,7 +168,7 @@ class FirTypeResolveTransformer(
return implicitTypeRef.compose() 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) return typeRef.transform(typeResolverTransformer, towerScope)
} }