[FIR] fix resolve contract violation from scopes
We cannot call lazy resolve to STATUS phase from scopes as scopes may be accessed on a STATUS phase or earlier ^KT-54890 ^KTIJ-23587 fixed
This commit is contained in:
+5
-2
@@ -43,8 +43,8 @@ import org.jetbrains.kotlin.fir.scopes.FirContainingNamesAwareScope
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.*
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.name.FqName
|
||||
import org.jetbrains.kotlin.name.Name
|
||||
import org.jetbrains.kotlin.psi.KtElement
|
||||
@@ -85,6 +85,7 @@ internal class KtFirScopeProvider(
|
||||
override fun getMemberScope(classSymbol: KtSymbolWithMembers): KtScope {
|
||||
return memberScopeCache.getOrPut(classSymbol) {
|
||||
val firScope = classSymbol.withFirForScope { fir ->
|
||||
fir.lazyResolveToPhase(FirResolvePhase.STATUS)
|
||||
val firSession = analysisSession.useSiteSession
|
||||
fir.unsubstitutedScope(
|
||||
firSession,
|
||||
@@ -124,6 +125,7 @@ internal class KtFirScopeProvider(
|
||||
?: return delegatedMemberScopeCache.getOrPut(classSymbol) { getEmptyScope() }
|
||||
return delegatedMemberScopeCache.getOrPut(classSymbol) {
|
||||
val firScope = classSymbol.withFirForScope { fir ->
|
||||
fir.lazyResolveToPhase(FirResolvePhase.STATUS)
|
||||
val delegateFields = fir.delegateFields
|
||||
if (delegateFields.isNotEmpty()) {
|
||||
val firSession = analysisSession.useSiteSession
|
||||
@@ -170,7 +172,8 @@ internal class KtFirScopeProvider(
|
||||
val firTypeScope = type.coneType.scope(
|
||||
firSession,
|
||||
scopeSession,
|
||||
FakeOverrideTypeCalculator.Forced
|
||||
FakeOverrideTypeCalculator.Forced,
|
||||
requiredPhase = FirResolvePhase.STATUS,
|
||||
) ?: return null
|
||||
return KtCompositeTypeScope(
|
||||
listOfNotNull(
|
||||
|
||||
+3
-1
@@ -25,6 +25,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtType
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.LLFirResolveSession
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirDefaultPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
@@ -58,7 +59,8 @@ internal class KtFirPropertySetterSymbol(
|
||||
val containingClassScope = firSymbol.dispatchReceiverType?.scope(
|
||||
session,
|
||||
firResolveSession.getScopeSessionFor(session),
|
||||
FakeOverrideTypeCalculator.DoNothing
|
||||
FakeOverrideTypeCalculator.DoNothing,
|
||||
requiredPhase = FirResolvePhase.STATUS,
|
||||
) ?: return false
|
||||
val overriddenProperties = containingClassScope.getDirectOverriddenProperties(propertySymbol)
|
||||
overriddenProperties.any { it.isVar }
|
||||
|
||||
+3
@@ -14,9 +14,11 @@ import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.requireIsInstance
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirClass
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScope
|
||||
import org.jetbrains.kotlin.fir.scopes.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
|
||||
internal abstract class KtFirMemberSymbolPointer<S : KtSymbol>(
|
||||
private val ownerPointer: KtSymbolPointer<KtSymbolWithMembers>,
|
||||
@@ -28,6 +30,7 @@ internal abstract class KtFirMemberSymbolPointer<S : KtSymbol>(
|
||||
val scope = with(analysisSession) {
|
||||
val ownerSymbol = ownerPointer.restoreSymbol() ?: return null
|
||||
val owner = ownerSymbol.firSymbol as? FirClassSymbol ?: return null
|
||||
owner.lazyResolveToPhase(FirResolvePhase.STATUS)
|
||||
getSearchScope(owner)
|
||||
} ?: return null
|
||||
|
||||
|
||||
Vendored
+1
-1
@@ -157,7 +157,7 @@ FILE: anonymousObjectInInvalidPosition.kt
|
||||
|
||||
private [BODY_RESOLVE] get(): <ERROR TYPE REF: Wrong number of type arguments>
|
||||
public abstract [TYPES] interface A<[TYPES] T> : R|kotlin/Any| {
|
||||
public abstract [STATUS] fun x(): R|kotlin/Unit|
|
||||
public abstract [TYPES] fun x(): R|kotlin/Unit|
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user