Ambiguity resolution added for exact signatures

This commit is contained in:
Andrey Breslav
2011-09-05 19:21:15 +04:00
parent 9223875977
commit 71a711a74d
2 changed files with 33 additions and 1 deletions
@@ -565,7 +565,16 @@ public class CallResolver {
@NotNull
public OverloadResolutionResult<FunctionDescriptor> resolveExactSignature(@NotNull JetScope scope, @Nullable JetType receiverType, @NotNull String name, @NotNull List<JetType> parameterTypes) {
List<FunctionDescriptor> result = findCandidatesByExactSignature(scope, receiverType, name, parameterTypes);
return listToOverloadResolutionResult(result);
BindingTraceContext trace = new BindingTraceContext();
TemporaryBindingTrace temporaryBindingTrace = TemporaryBindingTrace.create(trace);
Map<FunctionDescriptor, TemporaryBindingTrace> traces = Maps.newHashMap();
Map<FunctionDescriptor, FunctionDescriptor> candidates = Maps.newLinkedHashMap();
for (FunctionDescriptor functionDescriptor : result) {
candidates.put(functionDescriptor, functionDescriptor);
traces.put(functionDescriptor, temporaryBindingTrace);
}
return computeResultAndReportErrors(trace, TracingStrategy.EMPTY, candidates, Collections.<FunctionDescriptor>emptySet(), Collections.<FunctionDescriptor>emptySet(), traces);
}
private List<FunctionDescriptor> findCandidatesByExactSignature(JetScope scope, JetType receiverType, String name, List<JetType> parameterTypes) {
@@ -10,6 +10,29 @@ import java.util.Collection;
* @author abreslav
*/
/*package*/ interface TracingStrategy {
TracingStrategy EMPTY = new TracingStrategy() {
@Override
public void bindReference(@NotNull BindingTrace trace, @NotNull CallableDescriptor descriptor) {}
@Override
public void reportOverallResolutionError(@NotNull BindingTrace trace, @NotNull String message) {}
@Override
public void reportWrongTypeArguments(@NotNull BindingTrace trace, @NotNull String message) {}
@Override
public void reportWrongValueArguments(@NotNull BindingTrace trace, @NotNull String message) {}
@Override
public void reportUnresolvedReference(@NotNull BindingTrace trace) {}
@Override
public void reportErrorOnReference(BindingTrace trace, String message) {}
@Override
public <D extends CallableDescriptor> void recordAmbiguity(BindingTrace trace, Collection<D> candidates) {}
};
void bindReference(@NotNull BindingTrace trace, @NotNull CallableDescriptor descriptor);
void reportOverallResolutionError(@NotNull BindingTrace trace, @NotNull String message);