Refactoring: do not duplicate 'instructionElement' (old 'calleeExpression') as a parameter

to 'builder.call()' and 'builder.read()' methods
This commit is contained in:
Svetlana Isakova
2014-07-04 19:44:23 +04:00
parent 6988725207
commit 51a979d5f0
6 changed files with 23 additions and 32 deletions
@@ -127,16 +127,14 @@ public interface JetControlFlowBuilder {
@NotNull @NotNull
ReadValueInstruction readVariable( ReadValueInstruction readVariable(
@NotNull JetElement instructionElement, @NotNull JetExpression expression,
@NotNull JetExpression valueElement,
@NotNull ResolvedCall<?> resolvedCall, @NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues @NotNull Map<PseudoValue, ReceiverValue> receiverValues
); );
@NotNull @NotNull
CallInstruction call( CallInstruction call(
@NotNull JetElement instructionElement, @NotNull JetExpression expression,
@Nullable JetExpression valueElement,
@NotNull ResolvedCall<?> resolvedCall, @NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues, @NotNull Map<PseudoValue, ReceiverValue> receiverValues,
@NotNull Map<PseudoValue, ValueParameterDescriptor> arguments @NotNull Map<PseudoValue, ValueParameterDescriptor> arguments
@@ -86,23 +86,22 @@ public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuil
@NotNull @NotNull
@Override @Override
public ReadValueInstruction readVariable( public ReadValueInstruction readVariable(
@NotNull JetElement instructionElement, @NotNull JetExpression expression,
@NotNull JetExpression valueElement,
@NotNull ResolvedCall<?> resolvedCall, @NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues) { @NotNull Map<PseudoValue, ReceiverValue> receiverValues
return getDelegateBuilder().readVariable(instructionElement, valueElement, resolvedCall, receiverValues); ) {
return getDelegateBuilder().readVariable(expression, resolvedCall, receiverValues);
} }
@NotNull @NotNull
@Override @Override
public CallInstruction call( public CallInstruction call(
@NotNull JetElement instructionElement, @NotNull JetExpression expression,
@Nullable JetExpression valueElement,
@NotNull ResolvedCall<?> resolvedCall, @NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues, @NotNull Map<PseudoValue, ReceiverValue> receiverValues,
@NotNull Map<PseudoValue, ValueParameterDescriptor> arguments @NotNull Map<PseudoValue, ValueParameterDescriptor> arguments
) { ) {
return getDelegateBuilder().call(instructionElement, valueElement, resolvedCall, receiverValues, arguments); return getDelegateBuilder().call(expression, resolvedCall, receiverValues, arguments);
} }
@NotNull @NotNull
@@ -277,7 +277,7 @@ public class JetControlFlowProcessor {
CallableDescriptor resultingDescriptor = resolvedCall.getResultingDescriptor(); CallableDescriptor resultingDescriptor = resolvedCall.getResultingDescriptor();
if (resultingDescriptor instanceof ReceiverParameterDescriptor) { if (resultingDescriptor instanceof ReceiverParameterDescriptor) {
builder.readVariable(expression, expression, resolvedCall, getReceiverValues(resolvedCall, true)); builder.readVariable(expression, resolvedCall, getReceiverValues(resolvedCall, true));
} }
copyValue(expression, expression.getInstanceReference()); copyValue(expression, expression.getInstanceReference());
@@ -453,7 +453,7 @@ public class JetControlFlowProcessor {
private void generateArrayAssignment( private void generateArrayAssignment(
JetArrayAccessExpression lhs, JetArrayAccessExpression lhs,
@NotNull Function0<PseudoValue> rhsDeferredValue, @NotNull Function0<PseudoValue> rhsDeferredValue,
JetExpression parentExpression @NotNull JetExpression parentExpression
) { ) {
ResolvedCall<FunctionDescriptor> setResolvedCall = trace.get(BindingContext.INDEXED_LVALUE_SET, lhs); ResolvedCall<FunctionDescriptor> setResolvedCall = trace.get(BindingContext.INDEXED_LVALUE_SET, lhs);
@@ -473,7 +473,7 @@ public class JetControlFlowProcessor {
SmartFMap<PseudoValue, ValueParameterDescriptor> argumentValues = SmartFMap<PseudoValue, ValueParameterDescriptor> argumentValues =
getArraySetterArguments(rhsDeferredValue, setResolvedCall); getArraySetterArguments(rhsDeferredValue, setResolvedCall);
builder.call(parentExpression, parentExpression, setResolvedCall, receiverValues, argumentValues); builder.call(parentExpression, setResolvedCall, receiverValues, argumentValues);
} }
/* We assume that assignment right-hand side corresponds to the last argument of the call /* We assume that assignment right-hand side corresponds to the last argument of the call
@@ -1141,7 +1141,6 @@ public class JetControlFlowProcessor {
PseudoValue writtenValue; PseudoValue writtenValue;
if (resolvedCall != null) { if (resolvedCall != null) {
writtenValue = builder.call( writtenValue = builder.call(
entry,
entry, entry,
resolvedCall, resolvedCall,
getReceiverValues(resolvedCall, false), getReceiverValues(resolvedCall, false),
@@ -1412,10 +1411,10 @@ public class JetControlFlowProcessor {
: "No callee for " + callExpression.getText(); : "No callee for " + callExpression.getText();
assert parameterValues.isEmpty() assert parameterValues.isEmpty()
: "Variable-based call with non-empty argument list: " + callExpression.getText(); : "Variable-based call with non-empty argument list: " + callExpression.getText();
return builder.readVariable(calleeExpression, calleeExpression, resolvedCall, receivers); return builder.readVariable(calleeExpression, resolvedCall, receivers);
} }
mark(resolvedCall.getCall().getCallElement()); mark(resolvedCall.getCall().getCallElement());
return builder.call(callExpression, callExpression, resolvedCall, receivers, parameterValues); return builder.call(callExpression, resolvedCall, receivers, parameterValues);
} }
@NotNull @NotNull
@@ -450,27 +450,24 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
@NotNull @NotNull
@Override @Override
public ReadValueInstruction readVariable( public ReadValueInstruction readVariable(
@NotNull JetElement instructionElement, @NotNull JetExpression expression,
@NotNull JetExpression valueElement,
@NotNull ResolvedCall<?> resolvedCall, @NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues @NotNull Map<PseudoValue, ReceiverValue> receiverValues
) { ) {
return read(instructionElement, valueElement, resolvedCall, receiverValues); return read(expression, resolvedCall, receiverValues);
} }
@NotNull @NotNull
@Override @Override
public CallInstruction call( public CallInstruction call(
@NotNull JetElement instructionElement, @NotNull JetExpression expression,
@Nullable JetExpression valueElement,
@NotNull ResolvedCall<?> resolvedCall, @NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues, @NotNull Map<PseudoValue, ReceiverValue> receiverValues,
@NotNull Map<PseudoValue, ValueParameterDescriptor> arguments @NotNull Map<PseudoValue, ValueParameterDescriptor> arguments
) { ) {
JetType returnType = resolvedCall.getResultingDescriptor().getReturnType(); JetType returnType = resolvedCall.getResultingDescriptor().getReturnType();
CallInstruction instruction = CallInstruction.object$.create( CallInstruction instruction = CallInstruction.object$.create(
instructionElement, expression,
valueElement,
getCurrentScope(), getCurrentScope(),
resolvedCall, resolvedCall,
receiverValues, receiverValues,
@@ -512,13 +509,13 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
@NotNull @NotNull
private ReadValueInstruction read( private ReadValueInstruction read(
@NotNull JetElement instructionElement,
@NotNull JetExpression expression, @NotNull JetExpression expression,
@Nullable ResolvedCall<?> resolvedCall, @Nullable ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues) { @NotNull Map<PseudoValue, ReceiverValue> receiverValues
) {
AccessTarget accessTarget = resolvedCall != null ? new AccessTarget.Call(resolvedCall) : AccessTarget.BlackBox.instance$; AccessTarget accessTarget = resolvedCall != null ? new AccessTarget.Call(resolvedCall) : AccessTarget.BlackBox.instance$;
ReadValueInstruction instruction = ReadValueInstruction.object$.create( ReadValueInstruction instruction = ReadValueInstruction.object$.create(
instructionElement, expression, getCurrentScope(), accessTarget, receiverValues, valueFactory expression, getCurrentScope(), accessTarget, receiverValues, valueFactory
); );
add(instruction); add(instruction);
return instruction; return instruction;
@@ -526,7 +523,7 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
@NotNull @NotNull
private ReadValueInstruction read(@NotNull JetExpression expression) { private ReadValueInstruction read(@NotNull JetExpression expression) {
return read(expression, expression, null, Collections.<PseudoValue, ReceiverValue>emptyMap()); return read(expression, null, Collections.<PseudoValue, ReceiverValue>emptyMap());
} }
} }
@@ -78,14 +78,13 @@ public class ReadValueInstruction private (
class object { class object {
public fun create ( public fun create (
element: JetElement, element: JetElement,
valueElement: JetElement,
lexicalScope: LexicalScope, lexicalScope: LexicalScope,
target: AccessTarget, target: AccessTarget,
receiverValues: Map<PseudoValue, ReceiverValue>, receiverValues: Map<PseudoValue, ReceiverValue>,
factory: PseudoValueFactory factory: PseudoValueFactory
): ReadValueInstruction { ): ReadValueInstruction {
return ReadValueInstruction(element, lexicalScope, target, receiverValues, null).let { instruction -> return ReadValueInstruction(element, lexicalScope, target, receiverValues, null).let { instruction ->
instruction.newResultValue(factory, valueElement) instruction.newResultValue(factory, element)
instruction instruction
} }
} }
@@ -82,14 +82,13 @@ public class CallInstruction private(
class object { class object {
fun create ( fun create (
element: JetElement, element: JetElement,
valueElement: JetElement?,
lexicalScope: LexicalScope, lexicalScope: LexicalScope,
resolvedCall: ResolvedCall<*>, resolvedCall: ResolvedCall<*>,
receiverValues: Map<PseudoValue, ReceiverValue>, receiverValues: Map<PseudoValue, ReceiverValue>,
arguments: Map<PseudoValue, ValueParameterDescriptor>, arguments: Map<PseudoValue, ValueParameterDescriptor>,
factory: PseudoValueFactory? factory: PseudoValueFactory?
): CallInstruction = ): CallInstruction =
CallInstruction(element, lexicalScope, resolvedCall, receiverValues, arguments).setResult(factory, valueElement) as CallInstruction CallInstruction(element, lexicalScope, resolvedCall, receiverValues, arguments).setResult(factory, element) as CallInstruction
} }
} }