From 8ae5213155ab332d3ae96ed174a24370211c5601 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 13 Feb 2023 14:28:51 +0200 Subject: [PATCH] [FIR] Add tests for KT-50386 and KT-50646 --- ...nosisCompilerFirTestdataTestGenerated.java | 12 +++ ...TouchedTilContractsPhaseTestGenerated.java | 10 +++ .../resolve/callResolution/kt50386.fir.txt | 74 +++++++++++++++++++ .../resolve/callResolution/kt50386.kt | 42 +++++++++++ ...erloadsWithGenericAndGenericLambda.fir.txt | 17 +++++ .../overloadsWithGenericAndGenericLambda.kt | 10 +++ .../runners/FirDiagnosticTestGenerated.java | 12 +++ ...DiagnosticsWithLightTreeTestGenerated.java | 12 +++ 8 files changed, 189 insertions(+) create mode 100644 compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt create mode 100644 compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.fir.txt create mode 100644 compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java index 8d7828e88d9..8e4672e2bed 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerFirTestdataTestGenerated.java @@ -1059,6 +1059,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt37056.kt"); } + @Test + @TestMetadata("kt50386.kt") + public void testKt50386() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt"); + } + @Test @TestMetadata("lambdaAsReceiver.kt") public void testLambdaAsReceiver() throws Exception { @@ -1071,6 +1077,12 @@ public class DiagnosisCompilerFirTestdataTestGenerated extends AbstractDiagnosis runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/objectInvoke.kt"); } + @Test + @TestMetadata("overloadsWithGenericAndGenericLambda.kt") + public void testOverloadsWithGenericAndGenericLambda() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt"); + } + @Test @TestMetadata("safeCallOnTypeAlias.kt") public void testSafeCallOnTypeAlias() throws Exception { diff --git a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java index f4bdc07b919..ee45108f547 100644 --- a/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java +++ b/compiler/fir/analysis-tests/legacy-fir-tests/tests-gen/org/jetbrains/kotlin/fir/LazyBodyIsNotTouchedTilContractsPhaseTestGenerated.java @@ -913,6 +913,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt37056.kt"); } + @TestMetadata("kt50386.kt") + public void testKt50386() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt"); + } + @TestMetadata("lambdaAsReceiver.kt") public void testLambdaAsReceiver() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/lambdaAsReceiver.kt"); @@ -923,6 +928,11 @@ public class LazyBodyIsNotTouchedTilContractsPhaseTestGenerated extends Abstract runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/objectInvoke.kt"); } + @TestMetadata("overloadsWithGenericAndGenericLambda.kt") + public void testOverloadsWithGenericAndGenericLambda() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt"); + } + @TestMetadata("safeCallOnTypeAlias.kt") public void testSafeCallOnTypeAlias() throws Exception { runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/safeCallOnTypeAlias.kt"); diff --git a/compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.fir.txt b/compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.fir.txt new file mode 100644 index 00000000000..120463f13a5 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.fir.txt @@ -0,0 +1,74 @@ +FILE: kt50386.kt + public abstract interface Flow : R|kotlin/Any| { + } + public abstract interface MutableSharedFlow : R|Flow| { + } + public final fun test(output: R|(ScrapingOffOutput) -> kotlin/Unit|): R|kotlin/Unit| { + lval p: = #(R|/output|, = presenter@fun (): R|ScrapingOffPresenter| { + ^ R|/ScrapingOffPresenter.ScrapingOffPresenter|() + } + ) + } + public abstract class Presenter : R|kotlin/Any| { + public constructor(outputExtraBufferCapacity: R|kotlin/Int| = Int(16)): R|Presenter| { + super() + } + + public final val output: R|MutableSharedFlow| = Null(null)!! + public get(): R|MutableSharedFlow| + + public abstract fun Present(events: R|Events|): R|Model| + + } + public final fun presenter(events: R|Event|, output: R|((Output) -> kotlin/Unit)?| = Null(null), presenterProvider: R|() -> Presenter|): R|Model| { + ^presenter Null(null)!! + } + public final fun presenter(output: R|((Output) -> kotlin/Unit)?| = Null(null), extraBufferCapacity: R|kotlin/Int| = Int(16), presenterProvider: R|() -> Presenter, Model, Output>|): R|PresentedData>| { + ^presenter Null(null)!! + } + public final data class PresentedData : R|kotlin/Any| { + public constructor(model: R|M|, events: R|E|): R|PresentedData| { + super() + } + + public final val model: R|M| = R|/model| + public get(): R|M| + + public final val events: R|E| = R|/events| + public get(): R|E| + + public final operator fun component1(): R|M| + + public final operator fun component2(): R|E| + + public final fun copy(model: R|M| = this@R|/PresentedData|.R|/PresentedData.model|, events: R|E| = this@R|/PresentedData|.R|/PresentedData.events|): R|PresentedData| + + } + private final class ScrapingOffPresenter : R|Presenter, ScrapingOffModel, ScrapingOffOutput>| { + public constructor(): R|ScrapingOffPresenter| { + super, ScrapingOffModel, ScrapingOffOutput>|>() + } + + public open override fun Present(events: R|Flow|): R|ScrapingOffModel| { + ^Present R|/ScrapingOffModel.ScrapingOffModel|() + } + + } + public final class ScrapingOffEvent : R|kotlin/Any| { + public constructor(): R|ScrapingOffEvent| { + super() + } + + } + public final class ScrapingOffOutput : R|kotlin/Any| { + public constructor(): R|ScrapingOffOutput| { + super() + } + + } + public final class ScrapingOffModel : R|kotlin/Any| { + public constructor(): R|ScrapingOffModel| { + super() + } + + } diff --git a/compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt b/compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt new file mode 100644 index 00000000000..0cd763b2424 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt @@ -0,0 +1,42 @@ +// ISSUE: KT-50386 + +interface Flow +interface MutableSharedFlow : Flow + +fun test(output: ((ScrapingOffOutput) -> Unit)) { + val p = presenter(output) { ScrapingOffPresenter() } +} + +abstract class Presenter(outputExtraBufferCapacity: Int = 16) { + val output: MutableSharedFlow = null!! + + abstract fun Present(events: Events): Model +} + + +fun presenter( + events: Event, + output: ((Output) -> Unit)? = null, + presenterProvider: () -> Presenter +): Model = null!! + +fun presenter( + output: ((Output) -> Unit)? = null, + extraBufferCapacity: Int = 16, + presenterProvider: () -> Presenter, Model, Output> +): PresentedData> = null!! + +data class PresentedData( + val model: M, + val events: E, +) + +private class ScrapingOffPresenter : Presenter, ScrapingOffModel, ScrapingOffOutput>() { + override fun Present(events: Flow): ScrapingOffModel { + return ScrapingOffModel() + } +} + +class ScrapingOffEvent +class ScrapingOffOutput +class ScrapingOffModel diff --git a/compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.fir.txt b/compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.fir.txt new file mode 100644 index 00000000000..95ae1f5e2a3 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.fir.txt @@ -0,0 +1,17 @@ +FILE: overloadsWithGenericAndGenericLambda.kt + public final class Inv : R|kotlin/Any| { + public constructor(): R|Inv| { + super() + } + + } + public final fun foo(c: R|Inv|, f: R|() -> T|): R|kotlin/Unit| { + } + public final fun foo(c: R|Inv|, v: R|T|): R|kotlin/Unit| { + } + public final fun test(x: R|Inv|, v: R|T|): R|kotlin/Unit| { + #(R|/x|, = foo@fun (): R|T| { + ^ R|/v| + } + ) + } diff --git a/compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt b/compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt new file mode 100644 index 00000000000..a601ed264e6 --- /dev/null +++ b/compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt @@ -0,0 +1,10 @@ +// ISSUE: KT-50646 + +class Inv + +fun foo(c: Inv, f: () -> T) {} +fun foo(c: Inv, v: T) {} + +fun test(x: Inv, v: T) { + foo(x) { v } +} diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java index e7bee993dfb..a524ed72071 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticTestGenerated.java @@ -1059,6 +1059,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt37056.kt"); } + @Test + @TestMetadata("kt50386.kt") + public void testKt50386() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt"); + } + @Test @TestMetadata("lambdaAsReceiver.kt") public void testLambdaAsReceiver() throws Exception { @@ -1071,6 +1077,12 @@ public class FirDiagnosticTestGenerated extends AbstractFirDiagnosticTest { runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/objectInvoke.kt"); } + @Test + @TestMetadata("overloadsWithGenericAndGenericLambda.kt") + public void testOverloadsWithGenericAndGenericLambda() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt"); + } + @Test @TestMetadata("safeCallOnTypeAlias.kt") public void testSafeCallOnTypeAlias() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java index 9d1e17933b6..fa28ca7a523 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirDiagnosticsWithLightTreeTestGenerated.java @@ -1059,6 +1059,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt37056.kt"); } + @Test + @TestMetadata("kt50386.kt") + public void testKt50386() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/kt50386.kt"); + } + @Test @TestMetadata("lambdaAsReceiver.kt") public void testLambdaAsReceiver() throws Exception { @@ -1071,6 +1077,12 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/objectInvoke.kt"); } + @Test + @TestMetadata("overloadsWithGenericAndGenericLambda.kt") + public void testOverloadsWithGenericAndGenericLambda() throws Exception { + runTest("compiler/fir/analysis-tests/testData/resolve/callResolution/overloadsWithGenericAndGenericLambda.kt"); + } + @Test @TestMetadata("safeCallOnTypeAlias.kt") public void testSafeCallOnTypeAlias() throws Exception {