diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java index 98b1ac93e21..560c028cd3c 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -7823,6 +7823,16 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok public void testBasicFunInterfaceDisabled() throws Exception { runTest("compiler/testData/diagnostics/tests/funInterface/basicFunInterfaceDisabled.kt"); } + + @TestMetadata("genericSubstitutionForFunInterface.kt") + public void testGenericSubstitutionForFunInterface() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.kt"); + } + + @TestMetadata("severalConversionsForFunInterface.kt") + public void testSeveralConversionsForFunInterface() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt"); + } } @TestMetadata("compiler/testData/diagnostics/tests/functionAsExpression") diff --git a/compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.kt b/compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.kt new file mode 100644 index 00000000000..39dec07369e --- /dev/null +++ b/compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.kt @@ -0,0 +1,25 @@ +// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions +SamConversionPerArgument +FunctionInterfaceConversion +// !CHECK_TYPE + +fun interface F { + fun apply(s: S) +} + +interface PR {} + +interface K { + fun f_t(f1: F, f2: F) + fun f_r(f1: F, f2: F) + fun f_pr(f1: F>, f2: F>) +} + +fun test( + k: K, + f_string: F, + f_int: F, + f_pr: F> +) { + k.f_t(f_string) { it checkType { _() } } + k.f_r(f_int) { it checkType { _() } } + k.f_pr(f_pr) { it checkType { _>() } } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.txt b/compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.txt new file mode 100644 index 00000000000..7e20b13b3cf --- /dev/null +++ b/compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.txt @@ -0,0 +1,25 @@ +package + +public fun test(/*0*/ k: K, /*1*/ f_string: F, /*2*/ f_int: F, /*3*/ f_pr: F>): kotlin.Unit + +public interface F { + public abstract fun apply(/*0*/ s: S): kotlin.Unit + 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 K { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun f_pr(/*0*/ f1: F>, /*1*/ f2: F>): kotlin.Unit + public abstract fun f_r(/*0*/ f1: F, /*1*/ f2: F): kotlin.Unit + public abstract fun f_t(/*0*/ f1: F, /*1*/ f2: F): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface PR { + 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/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt b/compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt new file mode 100644 index 00000000000..5690aa82031 --- /dev/null +++ b/compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt @@ -0,0 +1,33 @@ +// !LANGUAGE: +NewInference +SamConversionForKotlinFunctions +SamConversionPerArgument +FunctionInterfaceConversion + +interface J { + fun foo1(r: KRunnable) + + fun foo2(r1: KRunnable, r2: KRunnable) + + fun foo3(r1: KRunnable, r2: KRunnable, r3: KRunnable) +} + +fun interface KRunnable { + fun run() +} + +// FILE: 1.kt +fun test(j: J, r: KRunnable) { + j.foo1(r) + j.foo1({}) + + j.foo2(r, r) + j.foo2({}, {}) + j.foo2(r, {}) + j.foo2({}, r) + + j.foo3(r, r, r) + j.foo3(r, r, {}) + j.foo3(r, {}, r) + j.foo3(r, {}, {}) + j.foo3({}, r, r) + j.foo3({}, r, {}) + j.foo3({}, {}, r) + j.foo3({}, {}, {}) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.txt b/compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.txt new file mode 100644 index 00000000000..5bd556848f2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.txt @@ -0,0 +1,19 @@ +package + +public fun test(/*0*/ j: J, /*1*/ r: KRunnable): kotlin.Unit + +public interface J { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun foo1(/*0*/ r: KRunnable): kotlin.Unit + public abstract fun foo2(/*0*/ r1: KRunnable, /*1*/ r2: KRunnable): kotlin.Unit + public abstract fun foo3(/*0*/ r1: KRunnable, /*1*/ r2: KRunnable, /*2*/ r3: KRunnable): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public interface KRunnable { + 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 abstract fun run(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index af70a1ea6fa..ef38bf81553 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -7905,6 +7905,16 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { public void testBasicFunInterfaceDisabled() throws Exception { runTest("compiler/testData/diagnostics/tests/funInterface/basicFunInterfaceDisabled.kt"); } + + @TestMetadata("genericSubstitutionForFunInterface.kt") + public void testGenericSubstitutionForFunInterface() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.kt"); + } + + @TestMetadata("severalConversionsForFunInterface.kt") + public void testSeveralConversionsForFunInterface() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt"); + } } @TestMetadata("compiler/testData/diagnostics/tests/functionAsExpression") diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 3e5aedcbdef..a8429e37a55 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -7900,6 +7900,16 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing public void testBasicFunInterfaceDisabled() throws Exception { runTest("compiler/testData/diagnostics/tests/funInterface/basicFunInterfaceDisabled.kt"); } + + @TestMetadata("genericSubstitutionForFunInterface.kt") + public void testGenericSubstitutionForFunInterface() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/genericSubstitutionForFunInterface.kt"); + } + + @TestMetadata("severalConversionsForFunInterface.kt") + public void testSeveralConversionsForFunInterface() throws Exception { + runTest("compiler/testData/diagnostics/tests/funInterface/severalConversionsForFunInterface.kt"); + } } @TestMetadata("compiler/testData/diagnostics/tests/functionAsExpression")