From bca24cf39c017db2a86a2ee40313f74000cb00c5 Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Mon, 5 Sep 2011 19:44:09 +0400 Subject: [PATCH] Resolution of == fixed --- .../jet/lang/types/JetTypeInferrer.java | 46 +++++++++---------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java index 91b13314c9e..e11ec200c06 100644 --- a/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java +++ b/idea/src/org/jetbrains/jet/lang/types/JetTypeInferrer.java @@ -2219,31 +2219,29 @@ public class JetTypeInferrer { String name = "equals"; if (right != null) { JetType leftType = getType(left, context.replaceScope(context.scope)); - if (leftType != null) { - JetType rightType = getType(right, context.replaceScope(context.scope)); - if (rightType != null) { - OverloadResolutionResult resolutionResult = context.services.callResolver.resolveExactSignature( - context.scope, leftType, "equals", - Collections.singletonList(JetStandardClasses.getNullableAnyType())); - if (resolutionResult.isSuccess()) { - FunctionDescriptor equals = resolutionResult.getDescriptor(); - context.trace.record(REFERENCE_TARGET, operationSign, equals); - if (ensureBooleanResult(operationSign, name, equals.getReturnType(), context)) { - ensureNonemptyIntersectionOfOperandTypes(expression, context); - } - } - else { - if (resolutionResult.isAmbiguity()) { - StringBuilder stringBuilder = new StringBuilder(); - for (FunctionDescriptor functionDescriptor : resolutionResult.getDescriptors()) { - stringBuilder.append(DescriptorRenderer.TEXT.render(functionDescriptor)).append(" "); - } - context.trace.getErrorHandler().genericError(operationSign.getNode(), "Ambiguous function: " + stringBuilder); - } - else { - context.trace.getErrorHandler().genericError(operationSign.getNode(), "No method 'equals(Any?) : Boolean' available"); - } + if (leftType == null) { + leftType = ErrorUtils.createErrorType("No type for " + left.getText()); + } + OverloadResolutionResult resolutionResult = context.services.callResolver.resolveExactSignature( + context.scope, leftType, "equals", + Collections.singletonList(JetStandardClasses.getNullableAnyType())); + if (resolutionResult.isSuccess()) { + FunctionDescriptor equals = resolutionResult.getDescriptor(); + context.trace.record(REFERENCE_TARGET, operationSign, equals); + if (ensureBooleanResult(operationSign, name, equals.getReturnType(), context)) { + ensureNonemptyIntersectionOfOperandTypes(expression, context); + } + } + else { + if (resolutionResult.isAmbiguity()) { + StringBuilder stringBuilder = new StringBuilder(); + for (FunctionDescriptor functionDescriptor : resolutionResult.getDescriptors()) { + stringBuilder.append(DescriptorRenderer.TEXT.render(functionDescriptor)).append(" "); } + context.trace.getErrorHandler().genericError(operationSign.getNode(), "Ambiguous function: " + stringBuilder); + } + else { + context.trace.getErrorHandler().genericError(operationSign.getNode(), "No method 'equals(Any?) : Boolean' available"); } } }