diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index c9d03eaf8a3..32cc7f1e230 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -12191,6 +12191,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/inference/nullableUpperBound.kt"); } + @Test + @TestMetadata("onlyInputTypesWithMultilevelIncorporation.kt") + public void testOnlyInputTypesWithMultilevelIncorporation() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.kt"); + } + @Test @TestMetadata("opposite.kt") public void testOpposite() throws Exception { diff --git a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt index 92ead9ac340..8bf648bf568 100644 --- a/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt +++ b/compiler/resolution.common/src/org/jetbrains/kotlin/resolve/calls/inference/components/ConstraintIncorporator.kt @@ -219,7 +219,8 @@ class ConstraintIncorporator( val kind = if (isSubtype) ConstraintKind.LOWER else ConstraintKind.UPPER - val inputTypePosition = baseConstraint.position.from as? OnlyInputTypeConstraintPosition + val inputTypePosition = + baseConstraint.position.from as? OnlyInputTypeConstraintPosition ?: baseConstraint.inputTypePositionBeforeIncorporation val isNewConstraintUsefulForNullability = isUsefulForNullabilityConstraint && newConstraint.isNullableNothing() val isOtherConstraintUsefulForNullability = otherConstraint.isNullabilityConstraint && otherConstraint.type.isNullableNothing() diff --git a/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.fir.kt b/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.fir.kt new file mode 100644 index 00000000000..d200b75dfdf --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.fir.kt @@ -0,0 +1,15 @@ +// WITH_RUNTIME +// !DIAGNOSTICS: -UNUSED_PARAMETER + +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") + +import kotlin.internal.OnlyInputTypes + +fun <@OnlyInputTypes T> assertEquals(expected: T, actual: T, message: String? = null) {} + +fun main() { + assertEquals( + mapOf(1 to "1", 2 to "2", 3 to "3"), + intArrayOf(1, 2, 3).associateWith { it.toString() } + ) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.kt b/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.kt new file mode 100644 index 00000000000..54fa3deeae2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.kt @@ -0,0 +1,15 @@ +// WITH_RUNTIME +// !DIAGNOSTICS: -UNUSED_PARAMETER + +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE") + +import kotlin.internal.OnlyInputTypes + +fun <@OnlyInputTypes T> assertEquals(expected: T, actual: T, message: String? = null) {} + +fun main() { + assertEquals( + mapOf(1 to "1", 2 to "2", 3 to "3"), + intArrayOf(1, 2, 3).associateWith { it.toString() } + ) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.txt b/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.txt new file mode 100644 index 00000000000..4ab5d44daa4 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.txt @@ -0,0 +1,4 @@ +package + +public fun assertEquals(/*0*/ expected: T, /*1*/ actual: T, /*2*/ message: kotlin.String? = ...): kotlin.Unit +public fun main(): kotlin.Unit diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 3e82a4d5cc9..6d21fdfd1c4 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -12197,6 +12197,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/inference/nullableUpperBound.kt"); } + @Test + @TestMetadata("onlyInputTypesWithMultilevelIncorporation.kt") + public void testOnlyInputTypesWithMultilevelIncorporation() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/onlyInputTypesWithMultilevelIncorporation.kt"); + } + @Test @TestMetadata("opposite.kt") public void testOpposite() throws Exception {