Resolution of == fixed

This commit is contained in:
Andrey Breslav
2011-09-05 19:44:09 +04:00
parent b632fc31d9
commit bca24cf39c
@@ -2219,31 +2219,29 @@ public class JetTypeInferrer {
String name = "equals"; String name = "equals";
if (right != null) { if (right != null) {
JetType leftType = getType(left, context.replaceScope(context.scope)); JetType leftType = getType(left, context.replaceScope(context.scope));
if (leftType != null) { if (leftType == null) {
JetType rightType = getType(right, context.replaceScope(context.scope)); leftType = ErrorUtils.createErrorType("No type for " + left.getText());
if (rightType != null) { }
OverloadResolutionResult<FunctionDescriptor> resolutionResult = context.services.callResolver.resolveExactSignature( OverloadResolutionResult<FunctionDescriptor> resolutionResult = context.services.callResolver.resolveExactSignature(
context.scope, leftType, "equals", context.scope, leftType, "equals",
Collections.singletonList(JetStandardClasses.getNullableAnyType())); Collections.singletonList(JetStandardClasses.getNullableAnyType()));
if (resolutionResult.isSuccess()) { if (resolutionResult.isSuccess()) {
FunctionDescriptor equals = resolutionResult.getDescriptor(); FunctionDescriptor equals = resolutionResult.getDescriptor();
context.trace.record(REFERENCE_TARGET, operationSign, equals); context.trace.record(REFERENCE_TARGET, operationSign, equals);
if (ensureBooleanResult(operationSign, name, equals.getReturnType(), context)) { if (ensureBooleanResult(operationSign, name, equals.getReturnType(), context)) {
ensureNonemptyIntersectionOfOperandTypes(expression, context); ensureNonemptyIntersectionOfOperandTypes(expression, context);
} }
} }
else { else {
if (resolutionResult.isAmbiguity()) { if (resolutionResult.isAmbiguity()) {
StringBuilder stringBuilder = new StringBuilder(); StringBuilder stringBuilder = new StringBuilder();
for (FunctionDescriptor functionDescriptor : resolutionResult.getDescriptors()) { for (FunctionDescriptor functionDescriptor : resolutionResult.getDescriptors()) {
stringBuilder.append(DescriptorRenderer.TEXT.render(functionDescriptor)).append(" "); 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");
}
} }
context.trace.getErrorHandler().genericError(operationSign.getNode(), "Ambiguous function: " + stringBuilder);
}
else {
context.trace.getErrorHandler().genericError(operationSign.getNode(), "No method 'equals(Any?) : Boolean' available");
} }
} }
} }