Ambiguity resolution added for exact signatures
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user