[FIR] Don't resolve annotation to error types on annotation phase

This commit is contained in:
Dmitriy Novozhilov
2020-04-29 12:56:50 +03:00
parent 17434c34b4
commit b52452ef84
@@ -18,7 +18,8 @@ import org.jetbrains.kotlin.fir.visitors.compose
class FirSpecificTypeResolverTransformer( class FirSpecificTypeResolverTransformer(
private val towerScope: FirIterableScope, private val towerScope: FirIterableScope,
override val session: FirSession override val session: FirSession,
private val errorTypeAsResolved: Boolean = true
) : FirAbstractTreeTransformer<Nothing?>(phase = FirResolvePhase.SUPER_TYPES) { ) : FirAbstractTreeTransformer<Nothing?>(phase = FirResolvePhase.SUPER_TYPES) {
private val typeResolver = session.typeResolver private val typeResolver = session.typeResolver
@@ -31,7 +32,7 @@ class FirSpecificTypeResolverTransformer(
functionTypeRef.transformChildren(this, data) functionTypeRef.transformChildren(this, data)
return buildResolvedFunctionTypeRef { return buildResolvedFunctionTypeRef {
source = functionTypeRef.source source = functionTypeRef.source
type = typeResolver.resolveType(functionTypeRef, towerScope) type = typeResolver.resolveType(functionTypeRef, towerScope).takeIfAcceptable() ?: return functionTypeRef.compose()
isMarkedNullable = functionTypeRef.isMarkedNullable isMarkedNullable = functionTypeRef.isMarkedNullable
isSuspend = functionTypeRef.isSuspend isSuspend = functionTypeRef.isSuspend
receiverTypeRef = functionTypeRef.receiverTypeRef receiverTypeRef = functionTypeRef.receiverTypeRef
@@ -44,12 +45,16 @@ class FirSpecificTypeResolverTransformer(
private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirTypeRef> { private fun transformType(typeRef: FirTypeRef, resolvedType: ConeKotlinType): CompositeTransformResult<FirTypeRef> {
return buildResolvedTypeRef { return buildResolvedTypeRef {
source = typeRef.source source = typeRef.source
type = resolvedType type = resolvedType.takeIfAcceptable() ?: return typeRef.compose()
annotations += typeRef.annotations annotations += typeRef.annotations
delegatedTypeRef = typeRef delegatedTypeRef = typeRef
}.compose() }.compose()
} }
private fun ConeKotlinType.takeIfAcceptable(): ConeKotlinType? = this.takeUnless {
!errorTypeAsResolved && it is ConeClassErrorType
}
override fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> { override fun transformResolvedTypeRef(resolvedTypeRef: FirResolvedTypeRef, data: Nothing?): CompositeTransformResult<FirTypeRef> {
return resolvedTypeRef.compose() return resolvedTypeRef.compose()
} }