[LL FIR] rewrite LLFirSuperTypeTargetResolver

The previous implementation had issues with
locks, publication and performance

Also, this change fixed a problem with mixed cycle inheritance

^KT-56550
^KTIJ-25430 Fixed
^KTIJ-23520 Fixed
^KT-57623 Fixed
^KTIJ-25372 Fixed
^KT-58357 Fixed
This commit is contained in:
Dmitrii Gridin
2023-05-02 19:30:55 +02:00
committed by Space Team
parent 09d17d88d7
commit c2b09d3b1e
19 changed files with 1844 additions and 317 deletions
@@ -53,7 +53,7 @@ internal sealed class KtFirNamedClassOrObjectSymbolBase : KtNamedClassOrObjectSy
// Shared Operations
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
override val superTypes: List<KtType> by cached {
firSymbol.superTypesAndAnnotationsListForRegularClass(builder)
firSymbol.superTypesList(builder)
}
context(KtAnalysisSession)
@@ -8,26 +8,11 @@ package org.jetbrains.kotlin.analysis.api.fir.symbols
import org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder
import org.jetbrains.kotlin.analysis.api.symbols.KtReceiverParameterSymbol
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.resolve.transformers.resolveSupertypesInTheAir
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
import org.jetbrains.kotlin.fir.types.FirTypeRef
import org.jetbrains.kotlin.fir.declarations.resolvePhase
internal fun FirClassSymbol<*>.superTypesList(builder: KtSymbolByFirBuilder): List<KtType> =
resolvedSuperTypeRefs.mapToKtType(builder)
internal fun FirRegularClassSymbol.superTypesAndAnnotationsListForRegularClass(builder: KtSymbolByFirBuilder): List<KtType> {
val fir = fir
if (fir.resolvePhase >= FirResolvePhase.SUPER_TYPES) {
return fir.superTypeRefs.mapToKtType(builder)
}
return fir.resolveSupertypesInTheAir(builder.rootSession).mapToKtType(builder)
}
internal fun FirClassSymbol<*>.superTypesList(builder: KtSymbolByFirBuilder): List<KtType> = resolvedSuperTypeRefs.mapToKtType(builder)
private fun List<FirTypeRef>.mapToKtType(
builder: KtSymbolByFirBuilder,