[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.
This commit is contained in:
committed by
Space Team
parent
84ad12be57
commit
7af2aebbe2
+7
-12
@@ -382,7 +382,7 @@ open class FirSupertypeResolverVisitor(
|
|||||||
|
|
||||||
private fun resolveSpecificClassLikeSupertypes(
|
private fun resolveSpecificClassLikeSupertypes(
|
||||||
classLikeDeclaration: FirClassLikeDeclaration,
|
classLikeDeclaration: FirClassLikeDeclaration,
|
||||||
resolveSuperTypeRefs: (FirTransformer<ScopeClassDeclaration>, ScopeClassDeclaration) -> List<FirResolvedTypeRef>,
|
resolveSuperTypeRefs: (FirSpecificTypeResolverTransformer, ScopeClassDeclaration) -> List<FirResolvedTypeRef>,
|
||||||
): List<FirResolvedTypeRef> {
|
): List<FirResolvedTypeRef> {
|
||||||
when (val status = supertypeComputationSession.getSupertypesComputationStatus(classLikeDeclaration)) {
|
when (val status = supertypeComputationSession.getSupertypesComputationStatus(classLikeDeclaration)) {
|
||||||
is SupertypeComputationStatus.Computed -> return status.supertypeRefs
|
is SupertypeComputationStatus.Computed -> return status.supertypeRefs
|
||||||
@@ -487,7 +487,7 @@ open class FirSupertypeResolverVisitor(
|
|||||||
private fun addSupertypesFromExtensions(
|
private fun addSupertypesFromExtensions(
|
||||||
klass: FirClassLikeDeclaration,
|
klass: FirClassLikeDeclaration,
|
||||||
supertypeRefs: MutableList<FirResolvedTypeRef>,
|
supertypeRefs: MutableList<FirResolvedTypeRef>,
|
||||||
typeResolveTransformer: FirTransformer<ScopeClassDeclaration>,
|
typeResolveTransformer: FirSpecificTypeResolverTransformer,
|
||||||
scopeDeclaration: ScopeClassDeclaration,
|
scopeDeclaration: ScopeClassDeclaration,
|
||||||
) {
|
) {
|
||||||
if (supertypeGenerationExtensions.isEmpty()) return
|
if (supertypeGenerationExtensions.isEmpty()) return
|
||||||
@@ -502,11 +502,13 @@ open class FirSupertypeResolverVisitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private class TypeResolveServiceForPlugins(
|
private class TypeResolveServiceForPlugins(
|
||||||
val typeResolveTransformer: FirTransformer<ScopeClassDeclaration>,
|
val typeResolveTransformer: FirSpecificTypeResolverTransformer,
|
||||||
val scopeDeclaration: ScopeClassDeclaration,
|
val scopeDeclaration: ScopeClassDeclaration,
|
||||||
) : FirSupertypeGenerationExtension.TypeResolveService() {
|
) : FirSupertypeGenerationExtension.TypeResolveService() {
|
||||||
override fun resolveUserType(type: FirUserTypeRef): FirResolvedTypeRef {
|
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 ->
|
return resolveSpecificClassLikeSupertypes(typeAlias) { transformer, scope ->
|
||||||
val resolvedTypeRef = transformer.transformTypeRef(expandedTypeRef, scope) as? FirResolvedTypeRef
|
val resolvedTypeRef = transformer.transformTypeRef(expandedTypeRef, scope)
|
||||||
?: return@resolveSpecificClassLikeSupertypes listOf(
|
|
||||||
createErrorTypeRef(
|
|
||||||
expandedTypeRef,
|
|
||||||
"Unresolved expanded typeRef for ${typeAlias.symbol.classId}",
|
|
||||||
DiagnosticKind.UnresolvedExpandedType
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
if (resolveRecursively) {
|
if (resolveRecursively) {
|
||||||
fun visitNestedTypeAliases(type: TypeArgumentMarker) {
|
fun visitNestedTypeAliases(type: TypeArgumentMarker) {
|
||||||
|
|||||||
Reference in New Issue
Block a user