diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt index b766ba2076d..59825d33310 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.csBuilder import org.jetbrains.kotlin.fir.resolve.inference.hasBuilderInferenceAnnotation import org.jetbrains.kotlin.fir.resolve.inference.model.ConeExplicitTypeParameterConstraintPosition import org.jetbrains.kotlin.fir.resolve.toSymbol +import org.jetbrains.kotlin.fir.resolve.typeAliasForConstructor import org.jetbrains.kotlin.fir.scopes.FirTypeScope import org.jetbrains.kotlin.fir.scopes.FirUnstableSmartcastTypeScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction @@ -580,6 +581,13 @@ internal object CheckVisibility : CheckerStage() { sink.yieldDiagnostic(VisibilityError) } } + + val typeAlias = declaration.typeAliasForConstructor + if (typeAlias != null) { + if (!visibilityChecker.isVisible(typeAlias.fir, candidate)) { + sink.yieldDiagnostic(VisibilityError) + } + } } } } diff --git a/compiler/testData/diagnostics/tests/typealias/constructorCallThroughPrivateAlias.fir.kt b/compiler/testData/diagnostics/tests/typealias/constructorCallThroughPrivateAlias.fir.kt index 7def821f1d5..5a0ce6f54ec 100644 --- a/compiler/testData/diagnostics/tests/typealias/constructorCallThroughPrivateAlias.fir.kt +++ b/compiler/testData/diagnostics/tests/typealias/constructorCallThroughPrivateAlias.fir.kt @@ -26,7 +26,7 @@ import _ fun baz() { a.A1("") // resolved to B constructor, OK - a.A2("") // resolved to B constructor, INVISIBLE_MEMBER because type alias is private, OK + a.A2("") // resolved to B constructor, INVISIBLE_MEMBER because type alias is private, OK a.A3("") checkType { _() }