diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt index 676bec8c262..97f4fe0356b 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/VariableFixationFinder.kt @@ -44,8 +44,8 @@ class VariableFixationFinder { private enum class TypeVariableFixationReadiness { FORBIDDEN, WITHOUT_PROPER_ARGUMENT_CONSTRAINT, // proper constraint from arguments -- not from upper bound for type parameters - RELATED_TO_ANY_OUTPUT_TYPE, WITH_COMPLEX_DEPENDENCY, // if type variable T has constraint with non fixed type variable inside (non-top-level): T <: Foo + RELATED_TO_ANY_OUTPUT_TYPE, READY_FOR_FIXATION, } @@ -56,8 +56,8 @@ class VariableFixationFinder { !notFixedTypeVariables.contains(variable) || dependencyProvider.isVariableRelatedToTopLevelType(variable) -> TypeVariableFixationReadiness.FORBIDDEN !variableHasProperArgumentConstraints(variable) -> TypeVariableFixationReadiness.WITHOUT_PROPER_ARGUMENT_CONSTRAINT - dependencyProvider.isVariableRelatedToAnyOutputType(variable) -> TypeVariableFixationReadiness.RELATED_TO_ANY_OUTPUT_TYPE hasDependencyToOtherTypeVariables(variable) -> TypeVariableFixationReadiness.WITH_COMPLEX_DEPENDENCY + dependencyProvider.isVariableRelatedToAnyOutputType(variable) -> TypeVariableFixationReadiness.RELATED_TO_ANY_OUTPUT_TYPE else -> TypeVariableFixationReadiness.READY_FOR_FIXATION } diff --git a/compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.kt b/compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.kt new file mode 100644 index 00000000000..de4197dadcf --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.kt @@ -0,0 +1,9 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +fun test() { + generateException(Data(1), { Data(it.x + 2) }) +} + +fun generateException(a: T, next: (T) -> T) {} + +class Data(val x: K) \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.txt b/compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.txt new file mode 100644 index 00000000000..77ca2f22acd --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.txt @@ -0,0 +1,12 @@ +package + +public fun generateException(/*0*/ a: T, /*1*/ next: (T) -> T): kotlin.Unit +public fun test(): kotlin.Unit + +public final class Data { + public constructor Data(/*0*/ x: K) + public final val x: K + 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 0f64b293c59..9aea8fef249 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -10827,6 +10827,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { doTest(fileName); } + @TestMetadata("operationsOnIntegerValueTypes.kt") + public void testOperationsOnIntegerValueTypes() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.kt"); + doTest(fileName); + } + @TestMetadata("subtypeConstraintOnNullableType.kt") public void testSubtypeConstraintOnNullableType() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inference/constraints/subtypeConstraintOnNullableType.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 934dab18fde..a455ca4b9ea 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -10827,6 +10827,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing doTest(fileName); } + @TestMetadata("operationsOnIntegerValueTypes.kt") + public void testOperationsOnIntegerValueTypes() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inference/constraints/operationsOnIntegerValueTypes.kt"); + doTest(fileName); + } + @TestMetadata("subtypeConstraintOnNullableType.kt") public void testSubtypeConstraintOnNullableType() throws Exception { String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/inference/constraints/subtypeConstraintOnNullableType.kt");