diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/AutoCastServiceImpl.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/AutoCastServiceImpl.java index dadd7ece9da..2cf6f33dbfe 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/AutoCastServiceImpl.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/AutoCastServiceImpl.java @@ -14,7 +14,7 @@ public class AutoCastServiceImpl implements AutoCastService { private final DataFlowInfo dataFlowInfo; private final BindingContext bindingContext; - AutoCastServiceImpl(DataFlowInfo dataFlowInfo, BindingContext bindingContext) { + public AutoCastServiceImpl(DataFlowInfo dataFlowInfo, BindingContext bindingContext) { this.dataFlowInfo = dataFlowInfo; this.bindingContext = bindingContext; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index e570337e6bc..5edbcd12bf7 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -652,7 +652,12 @@ public class CallResolver { } } if (!weakErrors.isEmpty()) { - return chooseAndReportMaximallySpecific(trace, tracing, weakErrors); + OverloadResolutionResults results = chooseAndReportMaximallySpecific(trace, tracing, weakErrors); + if (results.isSuccess()) { + return OverloadResolutionResults.singleFailedCandidate(results.getResult()); + } + + return OverloadResolutionResults.manyFailedCandidates(results.getResults()); } Set> noOverrides = OverridingUtil.filterOverrides(failedCandidates, MAP_TO_CANDIDATE); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadResolutionResults.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadResolutionResults.java index 034c7447d89..e93b7a0a2db 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadResolutionResults.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/OverloadResolutionResults.java @@ -5,7 +5,6 @@ import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import java.util.Collection; import java.util.Collections; -import java.util.Set; /** * @author abreslav @@ -41,7 +40,7 @@ public class OverloadResolutionResults { public static OverloadResolutionResults singleFailedCandidate(ResolvedCall candidate) { return new OverloadResolutionResults(Code.SINGLE_CANDIDATE_ARGUMENT_MISMATCH, Collections.singleton(candidate)); } - public static OverloadResolutionResults manyFailedCandidates(Set> failedCandidates) { + public static OverloadResolutionResults manyFailedCandidates(Collection> failedCandidates) { return new OverloadResolutionResults(Code.MANY_FAILED_CANDIDATES, failedCandidates); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/CallMaker.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/CallMaker.java index dcfe5818a21..d7e23978a8f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/CallMaker.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/CallMaker.java @@ -236,6 +236,11 @@ public class CallMaker { public PsiElement getCallElement() { return callElement; } + + @Override + public String toString() { + return callElement.toString(); + } }; } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/DataFlowInfo.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/DataFlowInfo.java index c4981048ece..757aca4ad5f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/DataFlowInfo.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/DataFlowInfo.java @@ -62,13 +62,16 @@ public class DataFlowInfo { } @NotNull - private List getPossibleTypes(Object key) { + private List getPossibleTypes(Object key, @NotNull JetType originalType) { List types = typeInfo.get(key); NullabilityFlags nullabilityFlags = nullabilityInfo.get(key); if (nullabilityFlags == null || nullabilityFlags.canBeNull()) { return types; } List enrichedTypes = Lists.newArrayListWithCapacity(types.size()); + if (originalType.isNullable()) { + enrichedTypes.add(TypeUtils.makeNotNullable(originalType)); + } for (JetType type: types) { if (type.isNullable()) { enrichedTypes.add(TypeUtils.makeNotNullable(type)); @@ -81,12 +84,12 @@ public class DataFlowInfo { } @NotNull - public List getPossibleTypesForVariable(VariableDescriptor variableDescriptor) { - return getPossibleTypes(variableDescriptor); + public List getPossibleTypesForVariable(@NotNull VariableDescriptor variableDescriptor) { + return getPossibleTypes(variableDescriptor, variableDescriptor.getOutType()); } public List getPossibleTypesForReceiver(@NotNull ReceiverDescriptor receiver) { - return getPossibleTypes(receiver); + return getPossibleTypes(receiver, receiver.getType()); } public DataFlowInfo equalsToNull(@NotNull VariableDescriptor variableDescriptor, boolean notNull) {