diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index de536306958..87cf402ca9d 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -2747,6 +2747,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/callableReference/kt37530.kt"); } + @Test + @TestMetadata("kt46437.kt") + public void testKt46437() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/kt46437.kt"); + } + @Test @TestMetadata("kt49038.kt") public void testKt49038() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 47dab91dd18..953ca70fe46 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -2747,6 +2747,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/callableReference/kt37530.kt"); } + @Test + @TestMetadata("kt46437.kt") + public void testKt46437() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/kt46437.kt"); + } + @Test @TestMetadata("kt49038.kt") public void testKt49038() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index e727951d36f..68832251c05 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -2747,6 +2747,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/callableReference/kt37530.kt"); } + @Test + @TestMetadata("kt46437.kt") + public void testKt46437() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/kt46437.kt"); + } + @Test @TestMetadata("kt49038.kt") public void testKt49038() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt index 61a8d814efd..cdeb86f368c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.diagnostics.Errors.BadNamedArgumentsTarget.* import org.jetbrains.kotlin.diagnostics.reportDiagnosticOnce import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.isNull +import org.jetbrains.kotlin.psi.psiUtil.lastBlockStatementOrThis import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.calls.util.* import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext @@ -24,6 +25,7 @@ import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.calls.smartcasts.SmartCastManager import org.jetbrains.kotlin.resolve.calls.tasks.TracingStrategy import org.jetbrains.kotlin.resolve.calls.tower.* +import org.jetbrains.kotlin.resolve.calls.util.* import org.jetbrains.kotlin.resolve.constants.CompileTimeConstantChecker import org.jetbrains.kotlin.resolve.constants.TypedCompileTimeConstant import org.jetbrains.kotlin.resolve.constants.evaluate.ConstantExpressionEvaluator @@ -142,6 +144,16 @@ class DiagnosticReporterByTrackingStrategy( SmartCastDiagnostic::class.java -> reportSmartCast(diagnostic as SmartCastDiagnostic) UnstableSmartCastDiagnosticError::class.java, UnstableSmartCastResolutionError::class.java -> reportUnstableSmartCast(diagnostic as UnstableSmartCast) + VisibilityErrorOnArgument::class.java -> { + diagnostic as VisibilityErrorOnArgument + val invisibleMember = diagnostic.invisibleMember + val argumentExpression = + diagnostic.argument.psiCallArgument.valueArgument.getArgumentExpression()?.lastBlockStatementOrThis() + + if (argumentExpression != null) { + trace.report(INVISIBLE_MEMBER.on(argumentExpression, invisibleMember, invisibleMember.visibility, invisibleMember)) + } + } TooManyArguments::class.java -> { trace.reportTrailingLambdaErrorOr(callArgument.psiExpression) { expr -> TOO_MANY_ARGUMENTS.on(expr, (diagnostic as TooManyArguments).descriptor) diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceArgumentResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceArgumentResolver.kt index 30a47c2cbdc..891a7e912cd 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceArgumentResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/CallableReferenceArgumentResolver.kt @@ -8,6 +8,8 @@ package org.jetbrains.kotlin.resolve.calls.components import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemBuilder import org.jetbrains.kotlin.resolve.calls.inference.components.NewTypeSubstitutor import org.jetbrains.kotlin.resolve.calls.model.* +import org.jetbrains.kotlin.resolve.calls.tower.VisibilityError +import org.jetbrains.kotlin.resolve.calls.tower.VisibilityErrorOnArgument import org.jetbrains.kotlin.resolve.calls.tower.isInapplicable class CallableReferenceArgumentResolver(val callableReferenceOverloadConflictResolver: CallableReferenceOverloadConflictResolver) { @@ -43,6 +45,7 @@ class CallableReferenceArgumentResolver(val callableReferenceOverloadConflictRes chosenCandidate.diagnostics.forEach { val transformedDiagnostic = when (it) { is CompatibilityWarning -> CompatibilityWarningOnArgument(argument, it.candidate) + is VisibilityError -> VisibilityErrorOnArgument(argument, it.invisibleMember) else -> it } diagnosticsHolder.addDiagnostic(transformedDiagnostic) diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt index 2f70131750e..d9067945310 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ImplicitScopeTower.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.incremental.components.LookupLocation import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintSystemError import org.jetbrains.kotlin.resolve.calls.model.DiagnosticReporter +import org.jetbrains.kotlin.resolve.calls.model.KotlinCallArgument import org.jetbrains.kotlin.resolve.calls.model.KotlinCallDiagnostic import org.jetbrains.kotlin.resolve.calls.tower.CandidateApplicability.* import org.jetbrains.kotlin.resolve.scopes.LexicalScope @@ -111,6 +112,15 @@ class VisibilityError(val invisibleMember: DeclarationDescriptorWithVisibility) } } +class VisibilityErrorOnArgument( + val argument: KotlinCallArgument, + val invisibleMember: DeclarationDescriptorWithVisibility +) : ResolutionDiagnostic(RUNTIME_ERROR) { + override fun report(reporter: DiagnosticReporter) { + reporter.onCallArgument(argument, this) + } +} + class NestedClassViaInstanceReference(val classDescriptor: ClassDescriptor) : ResolutionDiagnostic(IMPOSSIBLE_TO_GENERATE) class InnerClassViaStaticReference(val classDescriptor: ClassDescriptor) : ResolutionDiagnostic(IMPOSSIBLE_TO_GENERATE) class UnsupportedInnerClassCall(val message: String) : ResolutionDiagnostic(IMPOSSIBLE_TO_GENERATE) diff --git a/compiler/testData/diagnostics/tests/callableReference/kt46437.fir.kt b/compiler/testData/diagnostics/tests/callableReference/kt46437.fir.kt new file mode 100644 index 00000000000..44e6814a701 --- /dev/null +++ b/compiler/testData/diagnostics/tests/callableReference/kt46437.fir.kt @@ -0,0 +1,8 @@ +fun box(): String { + if (true) X::y else null + return "OK" +} + +object X { + private val y = null +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/callableReference/kt46437.kt b/compiler/testData/diagnostics/tests/callableReference/kt46437.kt new file mode 100644 index 00000000000..3635109ff25 --- /dev/null +++ b/compiler/testData/diagnostics/tests/callableReference/kt46437.kt @@ -0,0 +1,8 @@ +fun box(): String { + if (true) X::y else null + return "OK" +} + +object X { + private val y = null +} diff --git a/compiler/testData/diagnostics/tests/callableReference/kt46437.txt b/compiler/testData/diagnostics/tests/callableReference/kt46437.txt new file mode 100644 index 00000000000..d49107b9523 --- /dev/null +++ b/compiler/testData/diagnostics/tests/callableReference/kt46437.txt @@ -0,0 +1,11 @@ +package + +public fun box(): kotlin.String + +public object X { + private constructor X() + private final val y: kotlin.Nothing? = null + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index bec57de1848..7611903f7c3 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -2753,6 +2753,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/callableReference/kt37530.kt"); } + @Test + @TestMetadata("kt46437.kt") + public void testKt46437() throws Exception { + runTest("compiler/testData/diagnostics/tests/callableReference/kt46437.kt"); + } + @Test @TestMetadata("kt49038.kt") public void testKt49038() throws Exception {