From 86c09a1c78ac06528625eb5f86c3861261474ab2 Mon Sep 17 00:00:00 2001 From: "Evgeniy.Zhelenskiy" Date: Sat, 18 Nov 2023 15:22:48 +0100 Subject: [PATCH] [FIR] Report recursive typealias when loop is in type annotations ^KT-59908 --- .../resolve/transformers/FirSupertypesResolution.kt | 11 ++++++++--- .../diagnostics/tests/typealias/kt14612.fir.kt | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt index 8736d5331fa..4ee08ce6d38 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSupertypesResolution.kt @@ -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() 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) diff --git a/compiler/testData/diagnostics/tests/typealias/kt14612.fir.kt b/compiler/testData/diagnostics/tests/typealias/kt14612.fir.kt index 3aa32a7624f..81073397221 100644 --- a/compiler/testData/diagnostics/tests/typealias/kt14612.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/kt14612.fir.kt @@ -1,3 +1,3 @@ // ISSUE: KT-14612 -typealias S = @S Suppress +typealias S = @S Suppress