diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java index e2acab10a46..90a80221b6d 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -9893,6 +9893,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/inference/kt3184.kt"); } + @TestMetadata("kt32196.kt") + public void testKt32196() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt32196.kt"); + } + @TestMetadata("kt32415.kt") public void testKt32415() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/kt32415.kt"); diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt index 577d68297a7..0754fdb6489 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/ResultTypeResolver.kt @@ -18,10 +18,7 @@ package org.jetbrains.kotlin.resolve.calls.inference.components import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator import org.jetbrains.kotlin.resolve.calls.inference.components.TypeVariableDirectionCalculator.ResolveDirection -import org.jetbrains.kotlin.resolve.calls.inference.model.Constraint -import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintKind -import org.jetbrains.kotlin.resolve.calls.inference.model.VariableWithConstraints -import org.jetbrains.kotlin.resolve.calls.inference.model.checkConstraint +import org.jetbrains.kotlin.resolve.calls.inference.model.* import org.jetbrains.kotlin.types.AbstractTypeApproximator import org.jetbrains.kotlin.types.TypeApproximatorConfiguration import org.jetbrains.kotlin.types.model.KotlinTypeMarker @@ -82,7 +79,15 @@ class ResultTypeResolver( if (!checkConstraint(this, constraint.type, constraint.kind, resultType)) return false } - if (!trivialConstraintTypeInferenceOracle.isSuitableResultedType(resultType)) return false + /* + * If all upper constraints came from declared upper bounds we should accept Nothing + * as suitable type as OI does + */ + if ( + variableWithConstraints.constraints.any { + it.kind == ConstraintKind.UPPER && it.position.from !is DeclaredUpperBoundConstraintPosition + } && !trivialConstraintTypeInferenceOracle.isSuitableResultedType(resultType) + ) return false return true } diff --git a/compiler/testData/diagnostics/tests/inference/kt32196.fir.kt b/compiler/testData/diagnostics/tests/inference/kt32196.fir.kt new file mode 100644 index 00000000000..fbb44d62b1f --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt32196.fir.kt @@ -0,0 +1,9 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +class Inv + +fun Inv.mapNotNull(transform: (Int) -> R?): Inv = null!! + +fun test(inv: Inv) { + inv.mapNotNull { null } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/kt32196.kt b/compiler/testData/diagnostics/tests/inference/kt32196.kt new file mode 100644 index 00000000000..717d3f2c3b5 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt32196.kt @@ -0,0 +1,9 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +class Inv + +fun Inv.mapNotNull(transform: (Int) -> R?): Inv = null!! + +fun test(inv: Inv) { + ")!>inv.mapNotNull { null } +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/kt32196.txt b/compiler/testData/diagnostics/tests/inference/kt32196.txt new file mode 100644 index 00000000000..1bcdca8778d --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt32196.txt @@ -0,0 +1,11 @@ +package + +public fun test(/*0*/ inv: Inv): kotlin.Unit +public fun Inv.mapNotNull(/*0*/ transform: (kotlin.Int) -> R?): Inv + +public final class Inv { + public constructor Inv() + 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 825d077e096..21f1ff931f4 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -9900,6 +9900,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/inference/kt3184.kt"); } + @TestMetadata("kt32196.kt") + public void testKt32196() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt32196.kt"); + } + @TestMetadata("kt32415.kt") public void testKt32415() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/kt32415.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index a2c8d062252..f4c8ea04489 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -9895,6 +9895,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/inference/kt3184.kt"); } + @TestMetadata("kt32196.kt") + public void testKt32196() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt32196.kt"); + } + @TestMetadata("kt32415.kt") public void testKt32415() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/kt32415.kt");