Refactoring: do not duplicate 'instructionElement' (old 'calleeExpression') as a parameter
to 'builder.call()' and 'builder.read()' methods
This commit is contained in:
@@ -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
|
||||||
|
|||||||
+8
-11
@@ -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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-2
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user