[FIR] Resolve value class constructor to TYPES before using its params

Right now it is the easiest way to ensure that all the parameters are
resolved. After KT-53573 is fixed, we might use `resolvedReturnTypeRef`
on each parameter individually instead

Also, add `toString` implementation to `ValueClassRepresentation`
classes, so they are properly rendered in testdata

^KTIJ-22630 Fixed
This commit is contained in:
Roman Golyshev
2022-08-29 19:40:07 +02:00
committed by Space
parent 17f22c7204
commit 16cb3064c8
6 changed files with 213 additions and 2 deletions
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInline
import org.jetbrains.kotlin.fir.resolve.fullyExpandedType
import org.jetbrains.kotlin.fir.resolve.substitution.createTypeSubstitutorByTypeConstructor
import org.jetbrains.kotlin.fir.resolve.toSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.*
@@ -47,8 +48,15 @@ fun computeValueClassRepresentation(klass: FirRegularClass, session: FirSession)
return createValueClassRepresentation(session.typeContext, fields)
}
private fun FirRegularClass.getValueClassUnderlyingParameters(session: FirSession): List<FirValueParameter>? =
if (isInline) primaryConstructorIfAny(session)?.fir?.valueParameters else null
private fun FirRegularClass.getValueClassUnderlyingParameters(session: FirSession): List<FirValueParameter>? {
if (!isInline) return null
val primaryConstructorIfAny = primaryConstructorIfAny(session) ?: return null
// FIXME: ATM we cannot lazy-resolve value parameters individually because of KT-53573
primaryConstructorIfAny.lazyResolveToPhase(FirResolvePhase.TYPES)
return primaryConstructorIfAny.fir.valueParameters
}
private fun isRecursiveSingleFieldValueClass(
type: ConeSimpleKotlinType,