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 734447fef29..cbcaf8768bf 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -8341,6 +8341,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/generics/capturedParameters"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("captured.kt") + public void testCaptured() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/capturedParameters/captured.kt"); + } + @TestMetadata("innerLocalClass.kt") public void testInnerLocalClass() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/capturedParameters/innerLocalClass.kt"); diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt index bdbf9224a44..2daa47dfa2b 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/DiagnosticReporterByTrackingStrategy.kt @@ -257,7 +257,7 @@ class DiagnosticReporterByTrackingStrategy( val index = parameterTypes.indexOf(constraintError.upperKotlinType.unwrap()) val lambdaExpression = lambda.psiExpression as? KtLambdaExpression ?: return@lambda val parameter = lambdaExpression.valueParameters.getOrNull(index) ?: return@lambda - trace.report(Errors.EXPECTED_PARAMETER_TYPE_MISMATCH.on(parameter, constraintError.upperKotlinType.unCapture())) + trace.report(Errors.EXPECTED_PARAMETER_TYPE_MISMATCH.on(parameter, constraintError.upperKotlinType)) return } @@ -277,8 +277,8 @@ class DiagnosticReporterByTrackingStrategy( trace.report( Errors.TYPE_MISMATCH.on( deparenthesized, - constraintError.upperKotlinType.unCapture(), - constraintError.lowerKotlinType.unCapture() + constraintError.upperKotlinType, + constraintError.lowerKotlinType ) ) } @@ -289,8 +289,8 @@ class DiagnosticReporterByTrackingStrategy( trace.report( Errors.TYPE_MISMATCH.on( it, - constraintError.upperKotlinType.unCapture(), - constraintError.lowerKotlinType.unCapture() + constraintError.upperKotlinType, + constraintError.lowerKotlinType ) ) } diff --git a/compiler/testData/diagnostics/tests/generics/capturedParameters/captured.kt b/compiler/testData/diagnostics/tests/generics/capturedParameters/captured.kt new file mode 100644 index 00000000000..b69a24e3589 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/capturedParameters/captured.kt @@ -0,0 +1,30 @@ +// !LANGUAGE: +NewInference +// !DIAGNOSTICS: -UNUSED_PARAMETER + +class X { + abstract class Y + + fun foo(y: Y, t: T) { + } +} + + +fun testStar(y: X.Y<*>, t: Any) { + X().foo(y, t) +} + +fun testOut(y: X.Y, t: Any) { + X().foo(y, t) +} + +fun testIn(y: X.Y, t: Any) { + X().foo(y, t) +} + +fun testWithParameter(y: X.Y, t: Any) { + X().foo(y, t) +} + +fun testWithCapturedParameter(y: X.Y, t: Any) { + X().foo(y, t) +} diff --git a/compiler/testData/diagnostics/tests/generics/capturedParameters/captured.txt b/compiler/testData/diagnostics/tests/generics/capturedParameters/captured.txt new file mode 100644 index 00000000000..9360220bb10 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/capturedParameters/captured.txt @@ -0,0 +1,22 @@ +package + +public fun testIn(/*0*/ y: X.Y, /*1*/ t: kotlin.Any): kotlin.Unit +public fun testOut(/*0*/ y: X.Y, /*1*/ t: kotlin.Any): kotlin.Unit +public fun testStar(/*0*/ y: X.Y<*>, /*1*/ t: kotlin.Any): kotlin.Unit +public fun testWithCapturedParameter(/*0*/ y: X.Y, /*1*/ t: kotlin.Any): kotlin.Unit +public fun testWithParameter(/*0*/ y: X.Y, /*1*/ t: kotlin.Any): kotlin.Unit + +public final class X { + public constructor X() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public final fun foo(/*0*/ y: X.Y, /*1*/ t: T): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public abstract class Y { + public constructor Y() + 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/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 4e285245101..801136fec4f 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -8348,6 +8348,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/generics/capturedParameters"), Pattern.compile("^(.*)\\.kts?$"), TargetBackend.ANY, true); } + @TestMetadata("captured.kt") + public void testCaptured() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/capturedParameters/captured.kt"); + } + @TestMetadata("innerLocalClass.kt") public void testInnerLocalClass() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/capturedParameters/innerLocalClass.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 9e94ea9f3bd..82d7ce3ac34 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -8343,6 +8343,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/diagnostics/tests/generics/capturedParameters"), Pattern.compile("^(.+)\\.kt$"), TargetBackend.ANY, true); } + @TestMetadata("captured.kt") + public void testCaptured() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/capturedParameters/captured.kt"); + } + @TestMetadata("innerLocalClass.kt") public void testInnerLocalClass() throws Exception { runTest("compiler/testData/diagnostics/tests/generics/capturedParameters/innerLocalClass.kt");