~ Fix
diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirScopeProvider.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirScopeProvider.kt index ea20f28..67ec4b4 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirScopeProvider.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/components/KaFirScopeProvider.kt
@@ -165,7 +165,7 @@ firJavaClass, useSiteSession, scopeSession, - memberRequiredPhase = FirResolvePhase.STATUS, + memberRequiredPhase = null, ) fun getStaticScope() = JavaScopeProvider.getStaticScope(firJavaClass, useSiteSession, scopeSession)
diff --git a/analysis/analysis-api-fir/testData/surface/javaDeclaredMemberScopeResolution.txt b/analysis/analysis-api-fir/testData/surface/javaDeclaredMemberScopeResolution.txt index 6a2b263..4fc0cd9 100644 --- a/analysis/analysis-api-fir/testData/surface/javaDeclaredMemberScopeResolution.txt +++ b/analysis/analysis-api-fir/testData/surface/javaDeclaredMemberScopeResolution.txt
@@ -1,14 +1,14 @@ FILE: [ResolvedTo(IMPORTS)] main.kt - public open [ResolvedTo(STATUS)] class Base : R|kotlin/Any| { - public [ResolvedTo(STATUS)] [ContainingClassKey=Base] constructor(): R|Base| { + public open [ResolvedTo(SUPER_TYPES)] class Base : R|kotlin/Any| { + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Base] constructor(): R|Base| { LAZY_super<R|kotlin/Any|> } - public open [ResolvedTo(STATUS)] val baseProperty: R|kotlin/String| = LAZY_EXPRESSION - public [ResolvedTo(STATUS)] [ContainingClassKey=Base] get(): R|kotlin/String| + public? open [ResolvedTo(RAW_FIR)] val baseProperty: String = LAZY_EXPRESSION + public? [ResolvedTo(RAW_FIR)] [ContainingClassKey=Base] get(): String - public final [ResolvedTo(STATUS)] fun baseFunction(): R|kotlin/String| { LAZY_BLOCK } + public? final? [ResolvedTo(RAW_FIR)] fun baseFunction(): String { LAZY_BLOCK } - private final [ResolvedTo(STATUS)] fun privateBaseFunction(): R|kotlin/String| { LAZY_BLOCK } + private final? [ResolvedTo(RAW_FIR)] fun privateBaseFunction(): String { LAZY_BLOCK } }
diff --git a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt index c0f64a2..f7a2e0c 100644 --- a/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt +++ b/compiler/fir/fir-jvm/src/org/jetbrains/kotlin/fir/java/scopes/JavaClassUseSiteMemberScope.kt
@@ -256,7 +256,6 @@ private fun FirPropertySymbol.findSetterOverride( scope: FirScope, ): FirNamedFunctionSymbol? { - val propertyType = fir.returnTypeRef.coneTypeSafe<ConeKotlinType>() ?: return null val receiverCount = (if (receiverParameterSymbol != null) 1 else 0) + contextParameterSymbols.size return scope.getFunctions(Name.identifier(JvmAbi.setterName(fir.name.asString()))).firstNotNullOfOrNull factory@{ candidateSymbol -> @@ -275,7 +274,7 @@ candidateSymbol.takeIf { candidate.isAcceptableAsAccessorOverride() && AbstractTypeChecker.equalTypes( - session.typeContext, parameterType, propertyType + session.typeContext, parameterType, resolvedReturnType ) } }
diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt index 2412e3a..769457b 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/scopes/impl/FirFakeOverrideGenerator.kt
@@ -24,15 +24,14 @@ import org.jetbrains.kotlin.fir.scopes.deferredCallableCopyReturnType import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.* +import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.buildResolvedTypeRef import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImplWithoutSource -import org.jetbrains.kotlin.fir.utils.exceptions.withFirEntry import org.jetbrains.kotlin.name.CallableId import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.utils.addToStdlib.runIf -import org.jetbrains.kotlin.utils.exceptions.checkWithAttachment object FirFakeOverrideGenerator { fun createSubstitutionOverrideFunction( @@ -292,7 +291,7 @@ origin: FirDeclarationOrigin, copyDefaultValues: Boolean = false, ) { - checkStatusIsResolved(baseFunction) + ensureStatusIsResolved(baseFunction) annotations += baseFunction.annotations @Suppress("NAME_SHADOWING") @@ -724,7 +723,7 @@ deferredReturnTypeCalculation: DeferredCallableCopyReturnType?, updateReceiver: Boolean = true, ) { - checkStatusIsResolved(baseVariable) + ensureStatusIsResolved(baseVariable) annotations += baseVariable.annotations @Suppress("NAME_SHADOWING") @@ -937,18 +936,8 @@ object Nothing : Maybe<kotlin.Nothing>() } - private fun checkStatusIsResolved(member: FirCallableDeclaration) { - checkWithAttachment( - member.status is FirResolvedDeclarationStatus, - message = { - "Status should be resolved for a declaration to create its fake override, " + - "otherwise the status of the fake override will never be resolved." + - "The status was unresolved for ${member::class.java.simpleName}" - } - ) { - withFirEntry("declaration", member) - withEntry("declarationStatus", member.status) { it.toString() } - } + private fun ensureStatusIsResolved(member: FirCallableDeclaration) { + member.lazyResolveToPhase(FirResolvePhase.STATUS) } /**