From 7af2aebbe2a935c543fa2c7f5b3a4d1271f77d39 Mon Sep 17 00:00:00 2001 From: "Sergey.Shanshin" Date: Fri, 19 Jan 2024 16:43:05 +0100 Subject: [PATCH] [FIR] Fixed resolving type by FirUserTypeRef if type is parametrized If a parameterized type ref is passed during the `FirSupertypeGenerationExtension.TypeResolveService#resolveUserType` call, the `WRONG_NUMBER_OF_TYPE_ARGUMENTS` error occurs. --- .../transformers/FirSupertypesResolution.kt | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 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 1b29d76571a..a3670ae0363 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 @@ -382,7 +382,7 @@ open class FirSupertypeResolverVisitor( private fun resolveSpecificClassLikeSupertypes( classLikeDeclaration: FirClassLikeDeclaration, - resolveSuperTypeRefs: (FirTransformer, ScopeClassDeclaration) -> List, + resolveSuperTypeRefs: (FirSpecificTypeResolverTransformer, ScopeClassDeclaration) -> List, ): List { when (val status = supertypeComputationSession.getSupertypesComputationStatus(classLikeDeclaration)) { is SupertypeComputationStatus.Computed -> return status.supertypeRefs @@ -487,7 +487,7 @@ open class FirSupertypeResolverVisitor( private fun addSupertypesFromExtensions( klass: FirClassLikeDeclaration, supertypeRefs: MutableList, - typeResolveTransformer: FirTransformer, + typeResolveTransformer: FirSpecificTypeResolverTransformer, scopeDeclaration: ScopeClassDeclaration, ) { if (supertypeGenerationExtensions.isEmpty()) return @@ -502,11 +502,13 @@ open class FirSupertypeResolverVisitor( } private class TypeResolveServiceForPlugins( - val typeResolveTransformer: FirTransformer, + val typeResolveTransformer: FirSpecificTypeResolverTransformer, val scopeDeclaration: ScopeClassDeclaration, ) : FirSupertypeGenerationExtension.TypeResolveService() { override fun resolveUserType(type: FirUserTypeRef): FirResolvedTypeRef { - return type.transform(typeResolveTransformer, scopeDeclaration) + return typeResolveTransformer.withBareTypes(allowed = true) { + type.transform(typeResolveTransformer, scopeDeclaration) + } } } @@ -524,14 +526,7 @@ open class FirSupertypeResolverVisitor( } return resolveSpecificClassLikeSupertypes(typeAlias) { transformer, scope -> - val resolvedTypeRef = transformer.transformTypeRef(expandedTypeRef, scope) as? FirResolvedTypeRef - ?: return@resolveSpecificClassLikeSupertypes listOf( - createErrorTypeRef( - expandedTypeRef, - "Unresolved expanded typeRef for ${typeAlias.symbol.classId}", - DiagnosticKind.UnresolvedExpandedType - ) - ) + val resolvedTypeRef = transformer.transformTypeRef(expandedTypeRef, scope) if (resolveRecursively) { fun visitNestedTypeAliases(type: TypeArgumentMarker) {