diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt index eb65923951b..47101311bbf 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/scopes/impl/FirClassSubstitutionScope.kt @@ -6,9 +6,11 @@ package org.jetbrains.kotlin.fir.scopes.impl import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirEffectiveVisibilityImpl import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.* +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty import org.jetbrains.kotlin.fir.declarations.synthetic.buildSyntheticProperty import org.jetbrains.kotlin.fir.resolve.ScopeSession @@ -276,6 +278,7 @@ class FirClassSubstitutionScope( companion object { private fun FirFunctionBuilder.configureAnnotationsAndParameters( + session: FirSession, baseFunction: FirFunction<*>, newParameterTypes: List? ) { @@ -298,6 +301,14 @@ class FirClassSubstitutionScope( } } + private fun FirDeclarationStatus.withLocalEffectiveVisibility(isLocal: Boolean): FirDeclarationStatus { + return if (isLocal && this is FirDeclarationStatusImpl) { + resolved(visibility, FirEffectiveVisibilityImpl.Local, modality!!) + } else { + this + } + } + private fun createFakeOverrideFunction( fakeOverrideSymbol: FirFunctionSymbol, session: FirSession, @@ -309,6 +320,7 @@ class FirClassSubstitutionScope( ): FirSimpleFunction { // TODO: consider using here some light-weight functions instead of pseudo-real FirMemberFunctionImpl // As second alternative, we can invent some light-weight kind of FirRegularClass + val isLocal = fakeOverrideSymbol.callableId.classId?.isLocal == true return buildSimpleFunction { source = baseFunction.source this.session = session @@ -316,10 +328,10 @@ class FirClassSubstitutionScope( returnTypeRef = baseFunction.returnTypeRef.withReplacedReturnType(newReturnType) receiverTypeRef = baseFunction.receiverTypeRef?.withReplacedConeType(newReceiverType) name = baseFunction.name - status = baseFunction.status + status = baseFunction.status.withLocalEffectiveVisibility(isLocal) symbol = fakeOverrideSymbol resolvePhase = baseFunction.resolvePhase - configureAnnotationsAndParameters(baseFunction, newParameterTypes) + configureAnnotationsAndParameters(session, baseFunction, newParameterTypes) // TODO: Fix the hack for org.jetbrains.kotlin.fir.backend.Fir2IrVisitor.addFakeOverrides // We might have added baseFunction.typeParameters in case new ones are null @@ -375,7 +387,7 @@ class FirClassSubstitutionScope( isVar = baseProperty.isVar this.symbol = symbol isLocal = false - status = baseProperty.status + status = baseProperty.status.withLocalEffectiveVisibility(isLocal) resolvePhase = baseProperty.resolvePhase annotations += baseProperty.annotations if (newTypeParameters != null) { @@ -448,7 +460,7 @@ class FirClassSubstitutionScope( status = baseConstructor.status symbol = fakeOverrideSymbol resolvePhase = baseConstructor.resolvePhase - configureAnnotationsAndParameters(baseConstructor, newParameterTypes) + configureAnnotationsAndParameters(session, baseConstructor, newParameterTypes) // TODO: Fix the hack for org.jetbrains.kotlin.fir.backend.Fir2IrVisitor.addFakeOverrides // We might have added baseFunction.typeParameters in case new ones are null