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
ReadValueInstruction readVariable(
@NotNull JetElement instructionElement,
@NotNull JetExpression valueElement,
@NotNull JetExpression expression,
@NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues
);
@NotNull
CallInstruction call(
@NotNull JetElement instructionElement,
@Nullable JetExpression valueElement,
@NotNull JetExpression expression,
@NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues,
@NotNull Map<PseudoValue, ValueParameterDescriptor> arguments
@@ -86,23 +86,22 @@ public abstract class JetControlFlowBuilderAdapter implements JetControlFlowBuil
@NotNull
@Override
public ReadValueInstruction readVariable(
@NotNull JetElement instructionElement,
@NotNull JetExpression valueElement,
@NotNull JetExpression expression,
@NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues) {
return getDelegateBuilder().readVariable(instructionElement, valueElement, resolvedCall, receiverValues);
@NotNull Map<PseudoValue, ReceiverValue> receiverValues
) {
return getDelegateBuilder().readVariable(expression, resolvedCall, receiverValues);
}
@NotNull
@Override
public CallInstruction call(
@NotNull JetElement instructionElement,
@Nullable JetExpression valueElement,
@NotNull JetExpression expression,
@NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues,
@NotNull Map<PseudoValue, ValueParameterDescriptor> arguments
) {
return getDelegateBuilder().call(instructionElement, valueElement, resolvedCall, receiverValues, arguments);
return getDelegateBuilder().call(expression, resolvedCall, receiverValues, arguments);
}
@NotNull
@@ -277,7 +277,7 @@ public class JetControlFlowProcessor {
CallableDescriptor resultingDescriptor = resolvedCall.getResultingDescriptor();
if (resultingDescriptor instanceof ReceiverParameterDescriptor) {
builder.readVariable(expression, expression, resolvedCall, getReceiverValues(resolvedCall, true));
builder.readVariable(expression, resolvedCall, getReceiverValues(resolvedCall, true));
}
copyValue(expression, expression.getInstanceReference());
@@ -453,7 +453,7 @@ public class JetControlFlowProcessor {
private void generateArrayAssignment(
JetArrayAccessExpression lhs,
@NotNull Function0<PseudoValue> rhsDeferredValue,
JetExpression parentExpression
@NotNull JetExpression parentExpression
) {
ResolvedCall<FunctionDescriptor> setResolvedCall = trace.get(BindingContext.INDEXED_LVALUE_SET, lhs);
@@ -473,7 +473,7 @@ public class JetControlFlowProcessor {
SmartFMap<PseudoValue, ValueParameterDescriptor> argumentValues =
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
@@ -1141,7 +1141,6 @@ public class JetControlFlowProcessor {
PseudoValue writtenValue;
if (resolvedCall != null) {
writtenValue = builder.call(
entry,
entry,
resolvedCall,
getReceiverValues(resolvedCall, false),
@@ -1412,10 +1411,10 @@ public class JetControlFlowProcessor {
: "No callee for " + callExpression.getText();
assert parameterValues.isEmpty()
: "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());
return builder.call(callExpression, callExpression, resolvedCall, receivers, parameterValues);
return builder.call(callExpression, resolvedCall, receivers, parameterValues);
}
@NotNull
@@ -450,27 +450,24 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
@NotNull
@Override
public ReadValueInstruction readVariable(
@NotNull JetElement instructionElement,
@NotNull JetExpression valueElement,
@NotNull JetExpression expression,
@NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues
) {
return read(instructionElement, valueElement, resolvedCall, receiverValues);
return read(expression, resolvedCall, receiverValues);
}
@NotNull
@Override
public CallInstruction call(
@NotNull JetElement instructionElement,
@Nullable JetExpression valueElement,
@NotNull JetExpression expression,
@NotNull ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues,
@NotNull Map<PseudoValue, ValueParameterDescriptor> arguments
) {
JetType returnType = resolvedCall.getResultingDescriptor().getReturnType();
CallInstruction instruction = CallInstruction.object$.create(
instructionElement,
valueElement,
expression,
getCurrentScope(),
resolvedCall,
receiverValues,
@@ -512,13 +509,13 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
@NotNull
private ReadValueInstruction read(
@NotNull JetElement instructionElement,
@NotNull JetExpression expression,
@Nullable ResolvedCall<?> resolvedCall,
@NotNull Map<PseudoValue, ReceiverValue> receiverValues) {
@NotNull Map<PseudoValue, ReceiverValue> receiverValues
) {
AccessTarget accessTarget = resolvedCall != null ? new AccessTarget.Call(resolvedCall) : AccessTarget.BlackBox.instance$;
ReadValueInstruction instruction = ReadValueInstruction.object$.create(
instructionElement, expression, getCurrentScope(), accessTarget, receiverValues, valueFactory
expression, getCurrentScope(), accessTarget, receiverValues, valueFactory
);
add(instruction);
return instruction;
@@ -526,7 +523,7 @@ public class JetControlFlowInstructionsGenerator extends JetControlFlowBuilderAd
@NotNull
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 {
public fun create (
element: JetElement,
valueElement: JetElement,
lexicalScope: LexicalScope,
target: AccessTarget,
receiverValues: Map<PseudoValue, ReceiverValue>,
factory: PseudoValueFactory
): ReadValueInstruction {
return ReadValueInstruction(element, lexicalScope, target, receiverValues, null).let { instruction ->
instruction.newResultValue(factory, valueElement)
instruction.newResultValue(factory, element)
instruction
}
}
@@ -82,14 +82,13 @@ public class CallInstruction private(
class object {
fun create (
element: JetElement,
valueElement: JetElement?,
lexicalScope: LexicalScope,
resolvedCall: ResolvedCall<*>,
receiverValues: Map<PseudoValue, ReceiverValue>,
arguments: Map<PseudoValue, ValueParameterDescriptor>,
factory: PseudoValueFactory?
): CallInstruction =
CallInstruction(element, lexicalScope, resolvedCall, receiverValues, arguments).setResult(factory, valueElement) as CallInstruction
CallInstruction(element, lexicalScope, resolvedCall, receiverValues, arguments).setResult(factory, element) as CallInstruction
}
}