diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt index bba863f1f44..5c587b5314f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirInlineDeclarationChecker.kt @@ -12,19 +12,16 @@ import org.jetbrains.kotlin.descriptors.EffectiveVisibility import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn -import org.jetbrains.kotlin.fir.FirElement -import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.* import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.getModifier import org.jetbrains.kotlin.fir.analysis.checkers.isInlineOnly import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope import org.jetbrains.kotlin.fir.analysis.collectors.AbstractDiagnosticCollectorVisitor import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors -import org.jetbrains.kotlin.fir.containingClassLookupTag import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.languageVersionSettings import org.jetbrains.kotlin.fir.references.FirSuperReference import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol import org.jetbrains.kotlin.fir.resolve.toSymbol @@ -319,15 +316,21 @@ abstract class FirInlineDeclarationChecker : FirFunctionChecker() { } } - private fun FirCallableSymbol<*>.isInsidePrivateClass(): Boolean { - val containingClassSymbol = this.containingClassLookupTag()?.toSymbol(session) ?: return false + private fun FirBasedSymbol<*>.isInsidePrivateClass(): Boolean { + val containingClassSymbol = this.getOwnerLookupTag()?.toSymbol(session) ?: return false val containingClassVisibility = when (containingClassSymbol) { is FirAnonymousObjectSymbol -> return false is FirRegularClassSymbol -> containingClassSymbol.visibility is FirTypeAliasSymbol -> containingClassSymbol.visibility } - return containingClassVisibility == Visibilities.Private || containingClassVisibility == Visibilities.PrivateToThis + if (containingClassVisibility == Visibilities.Private || containingClassVisibility == Visibilities.PrivateToThis) { + return true + } + if (containingClassSymbol is FirRegularClassSymbol && containingClassSymbol.isCompanion) { + return containingClassSymbol.isInsidePrivateClass() + } + return false } } diff --git a/compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.fir.kt b/compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.fir.kt index 7b5e1f2d6da..e2fb69382a2 100644 --- a/compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.fir.kt +++ b/compiler/testData/diagnostics/tests/inline/nonPublicMember/kt55179.fir.kt @@ -10,6 +10,6 @@ private class Foo { internal inline fun foo() { Foo() Foo.Companion - Foo.buildFoo() + Foo.buildFoo() }