From 3242c70c6f84d6d99ce8686a878c7f4e3f3e7ea6 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 6 Sep 2011 13:27:33 +0400 Subject: [PATCH] Infix calls and nullable receivers --- .../jet/lang/types/JetTypeInferrer.java | 19 +++++++++++-------- .../checker/BinaryCallsOnNullableValues.jet | 2 +- .../regression/SpecififcityByReceiver.jet | 2 +- 3 files changed, 13 insertions(+), 10 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 271093e6371..9a3bc5e1a29 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -2398,14 +2398,17 @@ public class JetTypeInferrer { leftType, context.expectedType); if (functionDescriptor != null) { -// if (leftType.isNullable()) { -// // TODO : better error message for '1 + nullableVar' case -// context.trace.getErrorHandler().genericError(operationSign.getNode(), -// "Infix call corresponds to a dot-qualified call '" + -// left.getText() + "." + name + "(" + right.getText() + ")'" + -// " which is not allowed on a nullable receiver '" + right.getText() + "'." + -// " Use '?.'-qualified call instead"); -// } + if (leftType != null && leftType.isNullable()) { + // TODO : better error message for '1 + nullableVar' case + JetExpression right = binaryExpression.getRight(); + String rightText = right == null ? "" : right.getText(); + String leftText = binaryExpression.getLeft().getText(); + context.trace.getErrorHandler().genericError(binaryExpression.getOperationReference().getNode(), + "Infix call corresponds to a dot-qualified call '" + + leftText + "." + name + "(" + rightText + ")'" + + " which is not allowed on a nullable receiver '" + leftText + "'." + + " Use '?.'-qualified call instead"); + } return functionDescriptor.getReturnType(); } diff --git a/idea/testData/checker/BinaryCallsOnNullableValues.jet b/idea/testData/checker/BinaryCallsOnNullableValues.jet index b05563cd548..4bb8c5dcb9b 100644 --- a/idea/testData/checker/BinaryCallsOnNullableValues.jet +++ b/idea/testData/checker/BinaryCallsOnNullableValues.jet @@ -32,7 +32,7 @@ fun f(): Unit { x !== 1 x..2 - x in 1..2 + x in 1..2 val y : Boolean? = true false || y diff --git a/idea/testData/checker/regression/SpecififcityByReceiver.jet b/idea/testData/checker/regression/SpecififcityByReceiver.jet index 3ea23c51e45..4fba440c846 100644 --- a/idea/testData/checker/regression/SpecififcityByReceiver.jet +++ b/idea/testData/checker/regression/SpecififcityByReceiver.jet @@ -4,6 +4,6 @@ fun main(args: Array) { val command : Any = 1 - command?.equals(null) + command?.equals(null) command.equals(null) } \ No newline at end of file