From 577b9686c15c048eff3aae4fbd41ec2eae505968 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 19 Jul 2022 10:26:36 +0200 Subject: [PATCH] K2: fix using compatibility resolve for SAM constructors --- .../jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) 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 9f3213a07d4..24f7d9dc939 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 @@ -450,6 +450,7 @@ internal object CheckArguments : CheckerStage() { candidate.system.hasContradiction && callInfo.arguments.isNotEmpty() -> { sink.yieldDiagnostic(InapplicableCandidate) } + candidate.usesSAM && !candidate.isJavaApplicableCandidate() -> { sink.markCandidateForCompatibilityResolve(context) } @@ -458,9 +459,12 @@ internal object CheckArguments : CheckerStage() { } private fun Candidate.isJavaApplicableCandidate(): Boolean { - val symbol = symbol as? FirNamedFunctionSymbol ?: return false + val symbol = symbol as? FirFunctionSymbol ?: return false if (symbol.origin == FirDeclarationOrigin.Enhancement) return true if (originScope !is FirTypeScope) return false + // Note: constructor can also be Java applicable with enhancement origin, but it doesn't have overridden functions + // See samConstructorVsFun.kt diagnostic test + if (symbol !is FirNamedFunctionSymbol) return false var result = false