From c0f7a82b15f6f7de4f7796847ff9adb92ce41ae2 Mon Sep 17 00:00:00 2001 From: Svetlana Isakova Date: Thu, 8 Aug 2013 20:28:23 +0400 Subject: [PATCH] fixed result type for elvis operator return type for special call for elvis operator might be nullable but result is not nullable if the right type is not nullable --- .../expressions/BasicExpressionTypingVisitor.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) 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 930fa1c8093..a2777f4dc46 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 @@ -1032,8 +1032,15 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { if (leftType != null && isKnownToBeNotNull(left, leftType, context)) { context.trace.report(USELESS_ELVIS.on(left, leftType)); } - return JetTypeInfo.create(resolvedCall.getResultingDescriptor().getReturnType(), - resolvedCall.getDataFlowInfoForArguments().getResultInfo()); + JetTypeInfo rightTypeInfo = BindingContextUtils.getRecordedTypeInfo(right, context.trace.getBindingContext()); + assert rightTypeInfo != null : "Right expression was not processed: " + expression; + JetType rightType = rightTypeInfo.getType(); + + DataFlowInfo dataFlowInfo = resolvedCall.getDataFlowInfoForArguments().getResultInfo(); + JetType type = resolvedCall.getResultingDescriptor().getReturnType(); + if (type == null || rightType == null) return JetTypeInfo.create(null, dataFlowInfo); + + return JetTypeInfo.create(TypeUtils.makeNullableAsSpecified(type, rightType.isNullable()), dataFlowInfo); } @NotNull