[FIR] Report recursive typealias when loop is in type annotations

^KT-59908
This commit is contained in:
Evgeniy.Zhelenskiy
2023-11-18 15:22:48 +01:00
committed by Space Team
parent 31560217f8
commit 86c09a1c78
2 changed files with 9 additions and 4 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.*
import org.jetbrains.kotlin.fir.declarations.utils.expandedConeType
import org.jetbrains.kotlin.fir.declarations.utils.isCompanion
import org.jetbrains.kotlin.fir.declarations.utils.isInner
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind
import org.jetbrains.kotlin.fir.expressions.FirStatement
@@ -34,6 +35,7 @@ import org.jetbrains.kotlin.fir.scopes.impl.wrapNestedClassifierScopeWithSubstit
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.types.*
import org.jetbrains.kotlin.fir.types.builder.buildErrorTypeRef
import org.jetbrains.kotlin.fir.types.impl.FirImplicitBuiltinTypeRef
@@ -42,10 +44,8 @@ import org.jetbrains.kotlin.fir.visitors.FirDefaultVisitor
import org.jetbrains.kotlin.fir.visitors.FirTransformer
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.types.model.TypeArgumentMarker
import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.declarations.utils.isLocal
import org.jetbrains.kotlin.util.PrivateForInline
import org.jetbrains.kotlin.utils.addIfNotNull
class FirSupertypeResolverProcessor(session: FirSession, scopeSession: ScopeSession) : FirTransformerBasedResolveProcessor(
session, scopeSession, FirResolvePhase.SUPER_TYPES
@@ -721,6 +721,11 @@ open class SupertypeComputationSession {
var isErrorInSupertypesFound = false
val resultSupertypeRefs = mutableListOf<FirResolvedTypeRef>()
for (supertypeRef in supertypeRefs) {
for (annotation in supertypeRef.annotations) {
val resolvedType = annotation.resolvedType as? ConeClassLikeType ?: continue
val typeArgumentClassLikeDeclaration = resolvedType.lookupTag.toSymbol(session)?.fir
checkIsInLoop(typeArgumentClassLikeDeclaration, wasSubtypingInvolved, wereTypeArgumentsInvolved)
}
val supertypeFir = supertypeRef.firClassLike(session)
checkIsInLoop(supertypeFir, isSubtypingInvolved, wereTypeArgumentsInvolved)
@@ -1,3 +1,3 @@
// ISSUE: KT-14612
typealias S = @S Suppress
typealias S = <!RECURSIVE_TYPEALIAS_EXPANSION!>@S Suppress<!>