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 607b4150a71..d63ef5fea89 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 @@ -19771,12 +19771,30 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/basicInferenceForImplicitSelfType.kt"); } + @Test + @TestMetadata("enumExtensionFunction.kt") + public void testEnumExtensionFunction() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt"); + } + + @Test + @TestMetadata("overridingJKCases.kt") + public void testOverridingJKCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt"); + } + @Test @TestMetadata("recursiveTypeWithTwoTypeParams.kt") public void testRecursiveTypeWithTwoTypeParams() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/recursiveTypeWithTwoTypeParams.kt"); } + @Test + @TestMetadata("whereAndWithCases.kt") + public void testWhereAndWithCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt"); + } + @Test @TestMetadata("writerAppenderExampleRecursive.kt") public void testWriterAppenderExampleRecursive() throws Exception { 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 1fb8b8022b2..c973c133604 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 @@ -19771,12 +19771,30 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/basicInferenceForImplicitSelfType.kt"); } + @Test + @TestMetadata("enumExtensionFunction.kt") + public void testEnumExtensionFunction() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt"); + } + + @Test + @TestMetadata("overridingJKCases.kt") + public void testOverridingJKCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt"); + } + @Test @TestMetadata("recursiveTypeWithTwoTypeParams.kt") public void testRecursiveTypeWithTwoTypeParams() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/recursiveTypeWithTwoTypeParams.kt"); } + @Test + @TestMetadata("whereAndWithCases.kt") + public void testWhereAndWithCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt"); + } + @Test @TestMetadata("writerAppenderExampleRecursive.kt") public void testWriterAppenderExampleRecursive() throws Exception { 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 72e01e8d7d0..de2f1513392 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 @@ -19765,12 +19765,30 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/basicInferenceForImplicitSelfType.kt"); } + @Test + @TestMetadata("enumExtensionFunction.kt") + public void testEnumExtensionFunction() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt"); + } + + @Test + @TestMetadata("overridingJKCases.kt") + public void testOverridingJKCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt"); + } + @Test @TestMetadata("recursiveTypeWithTwoTypeParams.kt") public void testRecursiveTypeWithTwoTypeParams() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/recursiveTypeWithTwoTypeParams.kt"); } + @Test + @TestMetadata("whereAndWithCases.kt") + public void testWhereAndWithCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt"); + } + @Test @TestMetadata("writerAppenderExampleRecursive.kt") public void testWriterAppenderExampleRecursive() throws Exception { 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 8761c5ce92a..f74753088ba 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 @@ -19771,12 +19771,30 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/basicInferenceForImplicitSelfType.kt"); } + @Test + @TestMetadata("enumExtensionFunction.kt") + public void testEnumExtensionFunction() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt"); + } + + @Test + @TestMetadata("overridingJKCases.kt") + public void testOverridingJKCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt"); + } + @Test @TestMetadata("recursiveTypeWithTwoTypeParams.kt") public void testRecursiveTypeWithTwoTypeParams() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/recursiveTypeWithTwoTypeParams.kt"); } + @Test + @TestMetadata("whereAndWithCases.kt") + public void testWhereAndWithCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt"); + } + @Test @TestMetadata("writerAppenderExampleRecursive.kt") public void testWriterAppenderExampleRecursive() throws Exception { diff --git a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.fir.kt b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.fir.kt new file mode 100644 index 00000000000..177b4347f9f --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.fir.kt @@ -0,0 +1,16 @@ +// ISSUE: KT-59012 +// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes + +fun , T : G> Enum.foo(): T = TODO() +fun , T : G> Enum.bar(vararg args: T): Unit = TODO() + +fun > enumTest(a: Enum) { + val x = a.foo() + x + a.bar() +} + +fun enumStarTest(a: Enum<*>) { + a.foo() + a.bar() +} diff --git a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt new file mode 100644 index 00000000000..146103d95fd --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt @@ -0,0 +1,16 @@ +// ISSUE: KT-59012 +// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes + +fun , T : G> Enum.foo(): T = TODO() +fun , T : G> Enum.bar(vararg args: T): Unit = TODO() + +fun > enumTest(a: Enum) { + val x = a.foo() + x + a.bar() +} + +fun enumStarTest(a: Enum<*>) { + a.foo() + a.bar() +} diff --git a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.fir.kt b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.fir.kt new file mode 100644 index 00000000000..f929a0aa00f --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.fir.kt @@ -0,0 +1,50 @@ +// ISSUE: KT-59012 +// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes +// FILE: I.java +public interface I> { + T foo(); +} + +// FILE: J.java +public class J> { + void foo(T...args) {} +} + +// FILE: Main.kt +class A1> : I { + override fun foo(): T = TODO() +} + +class B1> : I { + override fun foo(): T = TODO() +} + +abstract class C1> : I + +class A2> : J() {} + +class B2> : J() {} + +class C2> : J() { + public override fun foo(vararg args: T) {} +} + +class D2> : J() { + public override fun foo(vararg args: T) {} +} + +fun javaInterfaceTest(a: A1<*>, b: B1<*>, c: C1<*>) { + val x = a.foo() + ")!>x + val y = b.foo() + >>>>")!>y + val z = c.foo() + >>>>..I>>>>?!")!>z +} + +fun javaClassTest(a: A2<*>, b: B2<*>, c: C2<*>, d: D2<*>) { + a.foo() + b.foo() + c.foo() + d.foo() +} diff --git a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt new file mode 100644 index 00000000000..602bf0f3bda --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt @@ -0,0 +1,50 @@ +// ISSUE: KT-59012 +// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes +// FILE: I.java +public interface I> { + T foo(); +} + +// FILE: J.java +public class J> { + void foo(T...args) {} +} + +// FILE: Main.kt +class A1> : I { + override fun foo(): T = TODO() +} + +class B1> : I { + override fun foo(): T = TODO() +} + +abstract class C1> : I + +class A2> : J() {} + +class B2> : J() {} + +class C2> : J() { + public override fun foo(vararg args: T) {} +} + +class D2> : J() { + public override fun foo(vararg args: T) {} +} + +fun javaInterfaceTest(a: A1<*>, b: B1<*>, c: C1<*>) { + val x = a.foo() + ")!>x + val y = b.foo() + ")!>y + val z = c.foo() + ..I<*>?)")!>z +} + +fun javaClassTest(a: A2<*>, b: B2<*>, c: C2<*>, d: D2<*>) { + a.foo() + b.foo() + c.foo() + d.foo() +} diff --git a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.fir.kt b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.fir.kt new file mode 100644 index 00000000000..d6039779375 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.fir.kt @@ -0,0 +1,39 @@ +// ISSUE: KT-59012 +// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes + +interface I1> { + fun foo() : T + fun bar(vararg args: T) +} + +interface I2> { + fun foo() : T + fun bar(vararg args: T) +} + +interface I3 where G : I3 { + fun foo() : T where T : G + fun bar(vararg args: T) where T : G +} + +fun test(a: I2<*>, b: I3<*>) { + val x = a.foo() + ")!>x + a.bar() + val y = b.foo() + ")!>y + b.bar() +} + +fun withTest(a: I1<*>, b: I3<*>) { + with(a) { + val x = foo() + ")!>x + bar() + } + with(b) { + val y = foo() + ")!>y + bar() + } +} diff --git a/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt new file mode 100644 index 00000000000..fc8347b58a7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt @@ -0,0 +1,39 @@ +// ISSUE: KT-59012 +// !LANGUAGE: +TypeInferenceOnCallsWithSelfTypes + +interface I1> { + fun foo() : T + fun bar(vararg args: T) +} + +interface I2> { + fun foo() : T + fun bar(vararg args: T) +} + +interface I3 where G : I3 { + fun foo() : T where T : G + fun bar(vararg args: T) where T : G +} + +fun test(a: I2<*>, b: I3<*>) { + val x = a.foo() + ")!>x + a.bar() + val y = b.foo() + ")!>y + b.bar() +} + +fun withTest(a: I1<*>, b: I3<*>) { + with(a) { + val x = foo() + ")!>x + bar() + } + with(b) { + val y = foo() + ")!>y + bar() + } +} 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 be54a578b95..2a1c086c377 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 @@ -19771,12 +19771,30 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/basicInferenceForImplicitSelfType.kt"); } + @Test + @TestMetadata("enumExtensionFunction.kt") + public void testEnumExtensionFunction() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/enumExtensionFunction.kt"); + } + + @Test + @TestMetadata("overridingJKCases.kt") + public void testOverridingJKCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/overridingJKCases.kt"); + } + @Test @TestMetadata("recursiveTypeWithTwoTypeParams.kt") public void testRecursiveTypeWithTwoTypeParams() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/recursiveTypeWithTwoTypeParams.kt"); } + @Test + @TestMetadata("whereAndWithCases.kt") + public void testWhereAndWithCases() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/recursiveTypes/selfTypes/enabledInferenceOnSelfTypes/whereAndWithCases.kt"); + } + @Test @TestMetadata("writerAppenderExampleRecursive.kt") public void testWriterAppenderExampleRecursive() throws Exception {