From 141be17b4b914f19cee2bac4b6810c882588bcc0 Mon Sep 17 00:00:00 2001 From: "Denis.Zharkov" Date: Fri, 8 Mar 2024 17:09:11 +0100 Subject: [PATCH] K2: Add some more tests showing the state for KT-64840 lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt should show in the future commits how early variable fixation necessary for bare type information might affect inference results ^KT-64840 Related --- ...CompilerTestFE10TestdataTestGenerated.java | 24 ++++++++++++ ...sticCompilerFE10TestDataTestGenerated.java | 24 ++++++++++++ ...eeOldFrontendDiagnosticsTestGenerated.java | 24 ++++++++++++ ...siOldFrontendDiagnosticsTestGenerated.java | 24 ++++++++++++ .../lambdaParameterForBareTypeAs.fir.kt | 28 ++++++++++++++ .../lambdaParameterForBareTypeAs.kt | 28 ++++++++++++++ ...areTypeEarlyFixationAffectsBehavior.fir.kt | 37 +++++++++++++++++++ ...ForBareTypeEarlyFixationAffectsBehavior.kt | 37 +++++++++++++++++++ ...meterForBareTypeOnOuterTypeVariable.fir.kt | 20 ++++++++++ ...ParameterForBareTypeOnOuterTypeVariable.kt | 20 ++++++++++ .../lambdaParameterForNonBareType.fir.kt | 27 ++++++++++++++ .../lambdaParameterForNonBareType.kt | 27 ++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 24 ++++++++++++ 13 files changed, 344 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.fir.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.fir.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.fir.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.fir.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 9cab87d18b8..69f0cf57e02 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -17825,6 +17825,30 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareType.kt"); } + @Test + @TestMetadata("lambdaParameterForBareTypeAs.kt") + public void testLambdaParameterForBareTypeAs() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt") + public void testLambdaParameterForBareTypeEarlyFixationAffectsBehavior() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeOnOuterTypeVariable.kt") + public void testLambdaParameterForBareTypeOnOuterTypeVariable() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt"); + } + + @Test + @TestMetadata("lambdaParameterForNonBareType.kt") + public void testLambdaParameterForNonBareType() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt"); + } + @Test @TestMetadata("lambdaParameterTypeFixation.kt") public void testLambdaParameterTypeFixation() { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index 645cd388eef..43485bf3c32 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -17825,6 +17825,30 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareType.kt"); } + @Test + @TestMetadata("lambdaParameterForBareTypeAs.kt") + public void testLambdaParameterForBareTypeAs() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt") + public void testLambdaParameterForBareTypeEarlyFixationAffectsBehavior() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeOnOuterTypeVariable.kt") + public void testLambdaParameterForBareTypeOnOuterTypeVariable() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt"); + } + + @Test + @TestMetadata("lambdaParameterForNonBareType.kt") + public void testLambdaParameterForNonBareType() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt"); + } + @Test @TestMetadata("lambdaParameterTypeFixation.kt") public void testLambdaParameterTypeFixation() { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 4fc2ef7813e..986bc7baea9 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -17819,6 +17819,30 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareType.kt"); } + @Test + @TestMetadata("lambdaParameterForBareTypeAs.kt") + public void testLambdaParameterForBareTypeAs() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt") + public void testLambdaParameterForBareTypeEarlyFixationAffectsBehavior() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeOnOuterTypeVariable.kt") + public void testLambdaParameterForBareTypeOnOuterTypeVariable() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt"); + } + + @Test + @TestMetadata("lambdaParameterForNonBareType.kt") + public void testLambdaParameterForNonBareType() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt"); + } + @Test @TestMetadata("lambdaParameterTypeFixation.kt") public void testLambdaParameterTypeFixation() { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 4e5e27e9148..f70c15e6448 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -17825,6 +17825,30 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareType.kt"); } + @Test + @TestMetadata("lambdaParameterForBareTypeAs.kt") + public void testLambdaParameterForBareTypeAs() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt") + public void testLambdaParameterForBareTypeEarlyFixationAffectsBehavior() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeOnOuterTypeVariable.kt") + public void testLambdaParameterForBareTypeOnOuterTypeVariable() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt"); + } + + @Test + @TestMetadata("lambdaParameterForNonBareType.kt") + public void testLambdaParameterForNonBareType() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt"); + } + @Test @TestMetadata("lambdaParameterTypeFixation.kt") public void testLambdaParameterTypeFixation() { diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.fir.kt new file mode 100644 index 00000000000..ffd5d68faac --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.fir.kt @@ -0,0 +1,28 @@ +// ISSUE: KT-64840 +class Controller { + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface A { + val a: F +} + +interface B : A { + val b: G +} + +fun withCallback(x: X, c: Controller, p: (X) -> Unit) {} + +fun main(a: A) { + val x = generate { + withCallback(a, this) { + (it as B).b.length + it.b.length + it.a.length + } + } + + ")!>x +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt new file mode 100644 index 00000000000..7ea3c3e6bef --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt @@ -0,0 +1,28 @@ +// ISSUE: KT-64840 +class Controller { + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface A { + val a: F +} + +interface B : A { + val b: G +} + +fun withCallback(x: X, c: Controller, p: (X) -> Unit) {} + +fun main(a: A) { + val x = generate { + withCallback(a, this) { + (it as B).b.length + it.b.length + it.a.length + } + } + + ")!>x +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.fir.kt new file mode 100644 index 00000000000..9bd5e18ba56 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.fir.kt @@ -0,0 +1,37 @@ +// !CHECK_TYPE +// ISSUE: KT-64840 + +class Controller { + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface CommonSupertype +interface A : CommonSupertype +interface B : A +interface C : CommonSupertype + +fun predicate(x: X, c: Controller, p: (X) -> Unit) {} + +fun main(a: A<*>, c: C) { + val x1 = generate { + predicate(a, this) { x -> + // x is B + } + + yield(c) + } + + x1 + + val x2 = generate { + predicate(a, this) { x -> + x is B + } + + yield(c) + } + + x2 +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt new file mode 100644 index 00000000000..ca13fa480da --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt @@ -0,0 +1,37 @@ +// !CHECK_TYPE +// ISSUE: KT-64840 + +class Controller { + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface CommonSupertype +interface A : CommonSupertype +interface B : A +interface C : CommonSupertype + +fun predicate(x: X, c: Controller, p: (X) -> Unit) {} + +fun main(a: A<*>, c: C) { + val x1 = generate { + predicate(a, this) { x -> + // x is B + } + + yield(c) + } + + x1 + + val x2 = generate { + predicate(a, this) { x -> + x is B + } + + yield(c) + } + + x2 +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.fir.kt new file mode 100644 index 00000000000..ccbbbf3ac3e --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.fir.kt @@ -0,0 +1,20 @@ +// ISSUE: KT-64840 +class Controller { + val t: T get() = TODO() + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface A { + val a: F? +} + +interface B : A + +fun main(a: A<*>) { + generate { + yield(a) + t is B + }.a +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt new file mode 100644 index 00000000000..9160820606d --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt @@ -0,0 +1,20 @@ +// ISSUE: KT-64840 +class Controller { + val t: T get() = TODO() + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface A { + val a: F? +} + +interface B : A + +fun main(a: A<*>) { + generate { + yield(a) + t is B + }.a +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.fir.kt new file mode 100644 index 00000000000..4fe24c08f04 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.fir.kt @@ -0,0 +1,27 @@ +// ISSUE: KT-64840 + +class Controller { + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface CommonSupertype +interface A : CommonSupertype +interface B : A +interface C : CommonSupertype + +fun predicate(x: X, c: Controller, p: (X) -> Boolean) {} + +fun main(a: A, c: C) { + val x2 = generate { + predicate(a, this) { x -> + // USELESS_IS_CHECK is errorenously reported in K1 + x is B + } + + yield(c) + } + + x2 +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt new file mode 100644 index 00000000000..1f2c5582c21 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt @@ -0,0 +1,27 @@ +// ISSUE: KT-64840 + +class Controller { + fun yield(t: T): Boolean = true +} + +fun generate(g: suspend Controller.() -> Unit): S = TODO() + +interface CommonSupertype +interface A : CommonSupertype +interface B : A +interface C : CommonSupertype + +fun predicate(x: X, c: Controller, p: (X) -> Boolean) {} + +fun main(a: A, c: C) { + val x2 = generate { + predicate(a, this) { x -> + // USELESS_IS_CHECK is errorenously reported in K1 + x is B + } + + yield(c) + } + + x2 +} 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 2073f3b6194..39c3a850220 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 @@ -17825,6 +17825,30 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareType.kt"); } + @Test + @TestMetadata("lambdaParameterForBareTypeAs.kt") + public void testLambdaParameterForBareTypeAs() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeAs.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt") + public void testLambdaParameterForBareTypeEarlyFixationAffectsBehavior() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeEarlyFixationAffectsBehavior.kt"); + } + + @Test + @TestMetadata("lambdaParameterForBareTypeOnOuterTypeVariable.kt") + public void testLambdaParameterForBareTypeOnOuterTypeVariable() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForBareTypeOnOuterTypeVariable.kt"); + } + + @Test + @TestMetadata("lambdaParameterForNonBareType.kt") + public void testLambdaParameterForNonBareType() { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/lambdaParameterForNonBareType.kt"); + } + @Test @TestMetadata("lambdaParameterTypeFixation.kt") public void testLambdaParameterTypeFixation() {