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 ae9e822d418..51a7a0199cb 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsSmokeTestGenerated.java @@ -9541,6 +9541,11 @@ public class FirDiagnosticsSmokeTestGenerated extends AbstractFirDiagnosticsSmok runTest("compiler/testData/diagnostics/tests/inference/cannotCompleteResolveWithFunctionLiterals.kt"); } + @TestMetadata("capturedInProjectedFlexibleType.kt") + public void testCapturedInProjectedFlexibleType() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.kt"); + } + @TestMetadata("coerceFunctionLiteralToSuspend.kt") public void testCoerceFunctionLiteralToSuspend() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/coerceFunctionLiteralToSuspend.kt"); diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/AbstractTypeCheckerContextForConstraintSystem.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/AbstractTypeCheckerContextForConstraintSystem.kt index 00ec0ad3b55..a9a920cc65a 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/AbstractTypeCheckerContextForConstraintSystem.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/AbstractTypeCheckerContextForConstraintSystem.kt @@ -90,7 +90,7 @@ abstract class AbstractTypeCheckerContextForConstraintSystem : AbstractTypeCheck val projection = typeMarker.typeConstructorProjection() if (projection.isStarProjection()) return null if (projection.getVariance() == TypeVariance.IN) { - val type = projection.getType().let { it.asSimpleType() ?: it.asFlexibleType()?.lowerBound() } ?: return null + val type = projection.getType().asSimpleType() ?: return null if (isMyTypeVariable(type)) { simplifyLowerConstraint(type, superType) if (isMyTypeVariable(superType.asSimpleType() ?: return null)) { diff --git a/compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.kt b/compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.kt new file mode 100644 index 00000000000..6c51937918d --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.kt @@ -0,0 +1,16 @@ +// !LANGUAGE: +NewInference +// !DIAGNOSTICS: -UNUSED_PARAMETER + +// FILE: A.java + +public class A { + public A getSuperA() { return null; } +} + +// FILE: main.kt + +fun foo(x: T?, func: (T) -> T?) {} + +fun test(a: A<*>) { + foo(a) { it.superA } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.txt b/compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.txt new file mode 100644 index 00000000000..bef1a7490a9 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.txt @@ -0,0 +1,12 @@ +package + +public fun foo(/*0*/ x: T?, /*1*/ func: (T) -> T?): kotlin.Unit +public fun test(/*0*/ a: A<*>): kotlin.Unit + +public open class A { + public constructor A() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open fun getSuperA(): A! + 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 6251bc2d177..34f92c4e9de 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -9548,6 +9548,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/inference/cannotCompleteResolveWithFunctionLiterals.kt"); } + @TestMetadata("capturedInProjectedFlexibleType.kt") + public void testCapturedInProjectedFlexibleType() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.kt"); + } + @TestMetadata("coerceFunctionLiteralToSuspend.kt") public void testCoerceFunctionLiteralToSuspend() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/coerceFunctionLiteralToSuspend.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index efa292aea8f..5e03bb62aa3 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -9543,6 +9543,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/inference/cannotCompleteResolveWithFunctionLiterals.kt"); } + @TestMetadata("capturedInProjectedFlexibleType.kt") + public void testCapturedInProjectedFlexibleType() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/capturedInProjectedFlexibleType.kt"); + } + @TestMetadata("coerceFunctionLiteralToSuspend.kt") public void testCoerceFunctionLiteralToSuspend() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/coerceFunctionLiteralToSuspend.kt");