FIR: ensure type ref transformed by type resolve transformer is resolved
This commit is contained in:
committed by
Mikhail Glukhikh
parent
52ea7fdb72
commit
fbb19e3b50
+7
-4
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user