Minor. strip explicit receiver for variable call if needed.

This commit is contained in:
Stanislav Erokhin
2015-12-10 21:16:19 +03:00
parent 1890b8cbd3
commit 616bb444ec
2 changed files with 20 additions and 18 deletions
@@ -139,6 +139,22 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
}; };
} }
public static Call stripReceiver(@NotNull Call variableCall) {
return new DelegatingCall(variableCall) {
@Nullable
@Override
public ASTNode getCallOperationNode() {
return null;
}
@NotNull
@Override
public ReceiverValue getExplicitReceiver() {
return ReceiverValue.NO_RECEIVER;
}
};
}
public static CallTransformer<CallableDescriptor, FunctionDescriptor> FUNCTION_CALL_TRANSFORMER = new CallTransformer<CallableDescriptor, FunctionDescriptor>() { public static CallTransformer<CallableDescriptor, FunctionDescriptor> FUNCTION_CALL_TRANSFORMER = new CallTransformer<CallableDescriptor, FunctionDescriptor>() {
@NotNull @NotNull
@Override @Override
@@ -197,22 +213,6 @@ public class CallTransformer<D extends CallableDescriptor, F extends D> {
candidateResolveMode); candidateResolveMode);
} }
private Call stripReceiver(@NotNull Call variableCall) {
return new DelegatingCall(variableCall) {
@Nullable
@Override
public ASTNode getCallOperationNode() {
return null;
}
@NotNull
@Override
public ReceiverValue getExplicitReceiver() {
return ReceiverValue.NO_RECEIVER;
}
};
}
@NotNull @NotNull
@Override @Override
public Collection<MutableResolvedCall<FunctionDescriptor>> transformCall( public Collection<MutableResolvedCall<FunctionDescriptor>> transformCall(
@@ -240,8 +240,10 @@ class NewResolveOldInference(
} }
override fun contextForVariable(stripExplicitReceiver: Boolean): TowerContext<Candidate> { override fun contextForVariable(stripExplicitReceiver: Boolean): TowerContext<Candidate> {
val basicCallResolutionContext = basicCallContext.replaceCall(CallTransformer.stripCallArguments(basicCallContext.call)) val newCall = CallTransformer.stripCallArguments(basicCallContext.call).let {
return Context(scopeTower, name, basicCallResolutionContext, tracing) if (stripExplicitReceiver) CallTransformer.stripReceiver(it) else it
}
return Context(scopeTower, name, basicCallContext.replaceCall(newCall), tracing)
} }
override fun contextForInvoke(variable: Candidate, useExplicitReceiver: Boolean): Pair<ReceiverValue, TowerContext<Candidate>>? { override fun contextForInvoke(variable: Candidate, useExplicitReceiver: Boolean): Pair<ReceiverValue, TowerContext<Candidate>>? {