[FE] Fix 'containingClassForStaticMemberAttr' for fake overrides (KTIJ-22808)
This commit is contained in:
+19
-5
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtSubstitutor
|
||||
import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFir
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.getOrBuildFirSafe
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.resolver.AllCandidatesResolver
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.errorWithFirSpecificEntries
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||
@@ -73,6 +74,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.buildErrorWithAttachment
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.shouldIjPlatformExceptionBeRethrown
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.withPsiEntry
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder
|
||||
|
||||
internal class KtFirCallResolver(
|
||||
@@ -966,11 +968,23 @@ internal class KtFirCallResolver(
|
||||
psi: KtElement,
|
||||
resolveFragmentOfCall: Boolean
|
||||
): List<KtCallCandidateInfo> {
|
||||
val candidates = AllCandidatesResolver(analysisSession.useSiteSession).getAllCandidatesForDelegatedConstructor(
|
||||
analysisSession.firResolveSession,
|
||||
this,
|
||||
psi
|
||||
)
|
||||
fun findDerivedClass(psi: KtElement): KtClassOrObject? {
|
||||
val parent = psi.parent
|
||||
return when (psi) {
|
||||
is KtConstructorDelegationCall -> ((parent as? KtSecondaryConstructor)?.parent as? KtClassBody)?.parent as? KtClassOrObject
|
||||
is KtSuperTypeCallEntry -> (parent as? KtSuperTypeList)?.parent as? KtClassOrObject
|
||||
is KtConstructorCalleeExpression -> (parent as? KtElement)?.let(::findDerivedClass)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
val derivedClass = findDerivedClass(psi)
|
||||
?.getOrBuildFirSafe<FirClass>(firResolveSession)
|
||||
?: return emptyList()
|
||||
|
||||
val candidates = AllCandidatesResolver(analysisSession.useSiteSession)
|
||||
.getAllCandidatesForDelegatedConstructor(analysisSession.firResolveSession, this, derivedClass.symbol.toLookupTag(), psi)
|
||||
|
||||
return candidates.mapNotNull {
|
||||
convertToKtCallCandidateInfo(
|
||||
this,
|
||||
|
||||
Reference in New Issue
Block a user