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 f780e217655..c917bcbe05c 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 @@ -34020,6 +34020,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/when/ExhaustiveWithNullabilityCheckElse.kt"); } + @Test + @TestMetadata("extractingEntireCall.kt") + public void testExtractingEntireCall() throws Exception { + runTest("compiler/testData/diagnostics/tests/when/extractingEntireCall.kt"); + } + @Test @TestMetadata("intersectionExhaustivenessComplex.kt") public void testIntersectionExhaustivenessComplex() 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 ef8e49f861e..a30f03d7190 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 @@ -34020,6 +34020,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/when/ExhaustiveWithNullabilityCheckElse.kt"); } + @Test + @TestMetadata("extractingEntireCall.kt") + public void testExtractingEntireCall() throws Exception { + runTest("compiler/testData/diagnostics/tests/when/extractingEntireCall.kt"); + } + @Test @TestMetadata("intersectionExhaustivenessComplex.kt") public void testIntersectionExhaustivenessComplex() 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 b318b6d1d5e..a6fa380bd3c 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 @@ -34020,6 +34020,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/when/ExhaustiveWithNullabilityCheckElse.kt"); } + @Test + @TestMetadata("extractingEntireCall.kt") + public void testExtractingEntireCall() throws Exception { + runTest("compiler/testData/diagnostics/tests/when/extractingEntireCall.kt"); + } + @Test @TestMetadata("intersectionExhaustivenessComplex.kt") public void testIntersectionExhaustivenessComplex() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/callUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/callUtil.kt index f6b9096fdfe..1f0f588b9d0 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/callUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/util/callUtil.kt @@ -160,7 +160,7 @@ fun KtElement.getCall(context: BindingContext): Call? { if (element is KtWhenExpression) { val subjectVariable = element.subjectVariable if (subjectVariable != null) { - return subjectVariable.getCall(context) + return subjectVariable.getCall(context) ?: context[CALL, element] } } diff --git a/compiler/testData/diagnostics/tests/when/extractingEntireCall.fir.kt b/compiler/testData/diagnostics/tests/when/extractingEntireCall.fir.kt new file mode 100644 index 00000000000..a7e79971f08 --- /dev/null +++ b/compiler/testData/diagnostics/tests/when/extractingEntireCall.fir.kt @@ -0,0 +1,15 @@ +// WITH_STDLIB + +interface FirExpression +interface FirNamedArgumentExpression : FirExpression { + val expression: FirNamedArgumentExpression +} +class AnnotationUseSiteTarget + +private fun List.toAnnotationUseSiteTargets2(): Set = + flatMapTo(mutableSetOf()) { arg -> + when (val unwrappedArg = if (arg is FirNamedArgumentExpression) arg.expression else arg) { + is FirNamedArgumentExpression -> setOf() + else -> setOf() + } + } \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/when/extractingEntireCall.kt b/compiler/testData/diagnostics/tests/when/extractingEntireCall.kt new file mode 100644 index 00000000000..47d2d456f3c --- /dev/null +++ b/compiler/testData/diagnostics/tests/when/extractingEntireCall.kt @@ -0,0 +1,15 @@ +// WITH_STDLIB + +interface FirExpression +interface FirNamedArgumentExpression : FirExpression { + val expression: FirNamedArgumentExpression +} +class AnnotationUseSiteTarget + +private fun List.toAnnotationUseSiteTargets2(): Set = + flatMapTo(mutableSetOf()) { arg -> + when (val unwrappedArg = if (arg is FirNamedArgumentExpression) arg.expression else arg) { + is FirNamedArgumentExpression -> setOf() + else -> setOf() + } + } diff --git a/compiler/testData/diagnostics/tests/when/extractingEntireCall.txt b/compiler/testData/diagnostics/tests/when/extractingEntireCall.txt new file mode 100644 index 00000000000..82f0bb5ac55 --- /dev/null +++ b/compiler/testData/diagnostics/tests/when/extractingEntireCall.txt @@ -0,0 +1,23 @@ +package + +private fun kotlin.collections.List.toAnnotationUseSiteTargets2(): kotlin.collections.Set + +public final class AnnotationUseSiteTarget { + public constructor AnnotationUseSiteTarget() + 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 +} + +public interface FirExpression { + 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 +} + +public interface FirNamedArgumentExpression : FirExpression { + public abstract val expression: FirNamedArgumentExpression + 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 c33713b71a4..7aec814732f 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 @@ -34110,6 +34110,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/when/ExhaustiveWithNullabilityCheckElse.kt"); } + @Test + @TestMetadata("extractingEntireCall.kt") + public void testExtractingEntireCall() throws Exception { + runTest("compiler/testData/diagnostics/tests/when/extractingEntireCall.kt"); + } + @Test @TestMetadata("intersectionExhaustivenessComplex.kt") public void testIntersectionExhaustivenessComplex() throws Exception {