Resolution of == fixed
This commit is contained in:
@@ -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");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user