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() {