diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java index 3f7468a0479..cb1b3e0f85b 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/ResolutionTask.java @@ -16,7 +16,6 @@ package org.jetbrains.jet.lang.resolve.calls; -import com.google.common.collect.LinkedHashMultimap; import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import com.intellij.lang.ASTNode; @@ -39,6 +38,7 @@ import org.jetbrains.jet.lexer.JetTokens; import java.util.Collection; import java.util.List; +import java.util.Set; import static org.jetbrains.jet.lang.diagnostics.Errors.*; import static org.jetbrains.jet.lang.resolve.BindingContext.*; @@ -48,9 +48,9 @@ import static org.jetbrains.jet.lang.resolve.BindingContext.*; * * @author abreslav */ -public class ResolutionTask extends ResolutionContext { +public class ResolutionTask extends ResolutionContext { private final Collection> candidates; - private final Multimap, ResolvedCallImpl> resolvedCallMap = LinkedHashMultimap.create(); + private final Set> resolvedCalls = Sets.newLinkedHashSet(); /*package*/ final JetReferenceExpression reference; private DescriptorCheckStrategy checkingStrategy; @@ -71,8 +71,8 @@ public class ResolutionTask extends ResolutionCont } @NotNull - public Multimap, ResolvedCallImpl> getResolvedCallMap() { - return resolvedCallMap; + public Set> getResolvedCalls() { + return resolvedCalls; } public void setCheckingStrategy(DescriptorCheckStrategy strategy) { @@ -86,8 +86,8 @@ public class ResolutionTask extends ResolutionCont return true; } - public ResolutionTask withTrace(BindingTrace newTrace) { - ResolutionTask newTask = new ResolutionTask(candidates, reference, newTrace, scope, call, expectedType, dataFlowInfo); + public ResolutionTask withTrace(BindingTrace newTrace) { + ResolutionTask newTask = new ResolutionTask(candidates, reference, newTrace, scope, call, expectedType, dataFlowInfo); newTask.setCheckingStrategy(checkingStrategy); return newTask; } @@ -98,22 +98,15 @@ public class ResolutionTask extends ResolutionCont public final TracingStrategy tracing = new TracingStrategy() { @Override - public void bindReference(@NotNull BindingTrace trace, @NotNull ResolvedCallImpl resolvedCall) { - D descriptor = resolvedCall.getCandidateDescriptor(); - // if (descriptor instanceof VariableAsFunctionDescriptor) { - // VariableAsFunctionDescriptor variableAsFunctionDescriptor = (VariableAsFunctionDescriptor) descriptor; - // trace.record(REFERENCE_TARGET, reference, variableAsFunctionDescriptor.getVariableDescriptor()); - // } - // else { - // } + public void bindResolvedCall(@NotNull BindingTrace trace, @NotNull ResolvedCallWithTrace resolvedCall) { + trace.record(REFERENCE_TARGET, reference, resolvedCall.getResultingDescriptor()); trace.record(RESOLVED_CALL, call.getCalleeExpression(), resolvedCall); - trace.record(REFERENCE_TARGET, reference, descriptor); } @Override - public void recordAmbiguity(BindingTrace trace, Collection> candidates) { + public void recordAmbiguity(BindingTrace trace, Collection> candidates) { Collection descriptors = Sets.newHashSet(); - for (ResolvedCallImpl candidate : candidates) { + for (ResolvedCallWithTrace candidate : candidates) { descriptors.add(candidate.getCandidateDescriptor()); } trace.record(AMBIGUOUS_REFERENCE_TARGET, reference, descriptors); @@ -155,7 +148,14 @@ public class ResolutionTask extends ResolutionCont @Override public void noReceiverAllowed(@NotNull BindingTrace trace) { - trace.report(NO_RECEIVER_ADMITTED.on(reference)); + if (reference instanceof JetSimpleNameExpression) { + //todo temporary hack + //should be stored that the reference is unresolved (and not trace the candidate descriptor) + trace.report(UNRESOLVED_REFERENCE.on(reference)); + } + else { + trace.report(NO_RECEIVER_ADMITTED.on(reference)); + } } @Override @@ -170,12 +170,12 @@ public class ResolutionTask extends ResolutionCont } @Override - public void ambiguity(@NotNull BindingTrace trace, @NotNull Collection> descriptors) { + public void ambiguity(@NotNull BindingTrace trace, @NotNull Collection> descriptors) { trace.report(OVERLOAD_RESOLUTION_AMBIGUITY.on(call.getCallElement(), descriptors)); } @Override - public void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection> descriptors) { + public void noneApplicable(@NotNull BindingTrace trace, @NotNull Collection> descriptors) { trace.report(NONE_APPLICABLE.on(reference, descriptors)); } @@ -233,8 +233,7 @@ public class ResolutionTask extends ResolutionCont @Override public void invisibleMember(@NotNull BindingTrace trace, @NotNull DeclarationDescriptor descriptor) { - JetExpression expression = call.getCalleeExpression(); - trace.report(INVISIBLE_MEMBER.on(expression != null ? expression : call.getCallElement(), descriptor, descriptor.getContainingDeclaration())); + trace.report(INVISIBLE_MEMBER.on(call.getCallElement(), descriptor, descriptor.getContainingDeclaration())); } }; } diff --git a/idea/src/org/jetbrains/jet/plugin/internal/resolvewindow/ResolveToolwindow.java b/idea/src/org/jetbrains/jet/plugin/internal/resolvewindow/ResolveToolwindow.java index d674edd60e0..0c456ff0f7b 100644 --- a/idea/src/org/jetbrains/jet/plugin/internal/resolvewindow/ResolveToolwindow.java +++ b/idea/src/org/jetbrains/jet/plugin/internal/resolvewindow/ResolveToolwindow.java @@ -192,9 +192,9 @@ public class ResolveToolwindow extends JPanel implements Disposable { StringBuilder result = new StringBuilder(); if (debugInfo != null) { - List> resolutionTasks = debugInfo.get(TASKS); - for (ResolutionTask resolutionTask : resolutionTasks) { - for (ResolvedCallImpl resolvedCall : resolutionTask.getResolvedCallMap().values()) { + List> resolutionTasks = debugInfo.get(TASKS); + for (ResolutionTask resolutionTask : resolutionTasks) { + for (ResolvedCallWithTrace resolvedCall : resolutionTask.getResolvedCalls()) { renderResolutionLogForCall(debugInfo, resolvedCall, result); } } @@ -212,7 +212,7 @@ public class ResolveToolwindow extends JPanel implements Disposable { return result.toString(); } - private void renderResolutionLogForCall(Data debugInfo, ResolvedCallImpl resolvedCall, StringBuilder result) { + private void renderResolutionLogForCall(Data debugInfo, ResolvedCallWithTrace resolvedCall, StringBuilder result) { result.append("Trying to call ").append(resolvedCall.getCandidateDescriptor()).append("\n"); StringBuilder errors = debugInfo.getByKey(ERRORS, resolvedCall); if (errors != null) {