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 f10a3fd331b..e2acab10a46 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirOldFrontendDiagnosticsTestGenerated.java @@ -10874,6 +10874,11 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirOldFronte runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3174.kt"); } + @TestMetadata("kt32250.kt") + public void testKt32250() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/regressions/kt32250.kt"); + } + @TestMetadata("kt32862_both.kt") public void testKt32862_both() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/regressions/kt32862_both.kt"); diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt index 74062286399..31f774d6712 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/components/KotlinCallCompleter.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.resolve.calls.inference.NewConstraintSystem import org.jetbrains.kotlin.resolve.calls.inference.addSubtypeConstraintIfCompatible import org.jetbrains.kotlin.resolve.calls.inference.components.KotlinConstraintSystemCompleter import org.jetbrains.kotlin.resolve.calls.inference.components.KotlinConstraintSystemCompleter.ConstraintSystemCompletionMode +import org.jetbrains.kotlin.resolve.calls.inference.components.TrivialConstraintTypeInferenceOracle import org.jetbrains.kotlin.resolve.calls.inference.model.ConstraintStorage.Empty.hasContradiction import org.jetbrains.kotlin.resolve.calls.inference.model.ExpectedTypeConstraintPosition import org.jetbrains.kotlin.resolve.calls.model.* @@ -27,7 +28,8 @@ import org.jetbrains.kotlin.types.typeUtil.contains class KotlinCallCompleter( private val postponedArgumentsAnalyzer: PostponedArgumentsAnalyzer, - private val kotlinConstraintSystemCompleter: KotlinConstraintSystemCompleter + private val kotlinConstraintSystemCompleter: KotlinConstraintSystemCompleter, + private val trivialConstraintTypeInferenceOracle: TrivialConstraintTypeInferenceOracle ) { fun runCompletion( @@ -261,7 +263,8 @@ class KotlinCallCompleter( return constraints.isNotEmpty() && constraints.anyOrAll(requireAll = typeVariable.hasExactAnnotation()) { !it.type.typeConstructor(context).isIntegerLiteralTypeConstructor(context) && (it.kind.isLower() || it.kind.isEqual()) && - csBuilder.isProperType(it.type) + csBuilder.isProperType(it.type) && + !trivialConstraintTypeInferenceOracle.isNotInterestingConstraint(it) } } diff --git a/compiler/testData/diagnostics/tests/inference/regressions/kt32250.kt b/compiler/testData/diagnostics/tests/inference/regressions/kt32250.kt new file mode 100644 index 00000000000..47302f2ca75 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/regressions/kt32250.kt @@ -0,0 +1,30 @@ +// !LANGUAGE: +NewInference +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_VARIABLE + +interface I { + fun foo() +} + +data class Pair(val fst: X, val snd: Y) + +class A(f: Pair Unit>? = null) + +class B(f: ((I) -> Unit)? = null) + +fun main() { + val cond = true + A( + if (cond) { + Pair(1, { baz -> baz.foo() }) + } else { + null + } + ) + B( + if (cond) { + { baz -> baz.foo() } + } else { + null + } + ) +} diff --git a/compiler/testData/diagnostics/tests/inference/regressions/kt32250.txt b/compiler/testData/diagnostics/tests/inference/regressions/kt32250.txt new file mode 100644 index 00000000000..6f2a0371845 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/regressions/kt32250.txt @@ -0,0 +1,36 @@ +package + +public fun main(): kotlin.Unit + +public final class A { + public constructor A(/*0*/ f: Pair 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 final class B { + public constructor B(/*0*/ f: ((I) -> 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 I { + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public abstract fun foo(): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} + +public final data class Pair { + public constructor Pair(/*0*/ fst: X, /*1*/ snd: Y) + public final val fst: X + public final val snd: Y + public final operator /*synthesized*/ fun component1(): X + public final operator /*synthesized*/ fun component2(): Y + public final /*synthesized*/ fun copy(/*0*/ fst: X = ..., /*1*/ snd: Y = ...): Pair + public open override /*1*/ /*synthesized*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*synthesized*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*synthesized*/ 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 1c3a327db55..825d077e096 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -10881,6 +10881,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3174.kt"); } + @TestMetadata("kt32250.kt") + public void testKt32250() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/regressions/kt32250.kt"); + } + @TestMetadata("kt32862_both.kt") public void testKt32862_both() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/regressions/kt32862_both.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 1c2a827db03..a2c8d062252 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -10876,6 +10876,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/inference/regressions/kt3174.kt"); } + @TestMetadata("kt32250.kt") + public void testKt32250() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/regressions/kt32250.kt"); + } + @TestMetadata("kt32862_both.kt") public void testKt32862_both() throws Exception { runTest("compiler/testData/diagnostics/tests/inference/regressions/kt32862_both.kt");