diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java index 18d8f6883ea..947b25617a6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/BasicExpressionTypingVisitor.java @@ -1015,10 +1015,8 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { JetType compareToReturnType = typeInfo.getType(); JetType type = null; if (compareToReturnType != null && !compareToReturnType.isError()) { - TypeConstructor constructor = compareToReturnType.getConstructor(); KotlinBuiltIns builtIns = KotlinBuiltIns.getInstance(); - TypeConstructor intTypeConstructor = builtIns.getInt().getTypeConstructor(); - if (constructor.equals(intTypeConstructor)) { + if (JetTypeChecker.DEFAULT.equalTypes(builtIns.getIntType(), compareToReturnType)) { type = builtIns.getBooleanType(); } else { diff --git a/compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.kt b/compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.kt new file mode 100644 index 00000000000..275e43f5231 --- /dev/null +++ b/compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.kt @@ -0,0 +1,12 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER + +class C { + fun compareTo(c: C): Int? = null +} + +fun test(c: C) { + c < c + c <= c + c >= c + c > c +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.txt b/compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.txt new file mode 100644 index 00000000000..feadd26f987 --- /dev/null +++ b/compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.txt @@ -0,0 +1,11 @@ +package + +internal fun test(/*0*/ c: C): kotlin.Unit + +internal final class C { + public constructor C() + internal final fun compareTo(/*0*/ c: C): kotlin.Int? + 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/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index b1952205fa8..e4dd85ea277 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -7493,6 +7493,12 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest(fileName); } + @TestMetadata("compareToNullable.kt") + public void testCompareToNullable() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.kt"); + doTest(fileName); + } + @TestMetadata("IteratorAmbiguity.kt") public void testIteratorAmbiguity() throws Exception { String fileName = JetTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/operatorsOverloading/IteratorAmbiguity.kt");