Ambiguity resolution added for exact signatures
This commit is contained in:
@@ -565,7 +565,16 @@ public class CallResolver {
|
|||||||
@NotNull
|
@NotNull
|
||||||
public OverloadResolutionResult<FunctionDescriptor> resolveExactSignature(@NotNull JetScope scope, @Nullable JetType receiverType, @NotNull String name, @NotNull List<JetType> parameterTypes) {
|
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);
|
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) {
|
private List<FunctionDescriptor> findCandidatesByExactSignature(JetScope scope, JetType receiverType, String name, List<JetType> parameterTypes) {
|
||||||
|
|||||||
@@ -10,6 +10,29 @@ import java.util.Collection;
|
|||||||
* @author abreslav
|
* @author abreslav
|
||||||
*/
|
*/
|
||||||
/*package*/ interface TracingStrategy {
|
/*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 bindReference(@NotNull BindingTrace trace, @NotNull CallableDescriptor descriptor);
|
||||||
|
|
||||||
void reportOverallResolutionError(@NotNull BindingTrace trace, @NotNull String message);
|
void reportOverallResolutionError(@NotNull BindingTrace trace, @NotNull String message);
|
||||||
|
|||||||
Reference in New Issue
Block a user