refactoring: use ExpressionCodegen.invokeMethodWithArguments() for calling delegators to constructors

This commit is contained in:
Dmitry Jemerov
2011-07-12 18:31:24 +02:00
parent f44ac29cde
commit 2d8ed0920b
3 changed files with 9 additions and 14 deletions
@@ -896,11 +896,11 @@ public class ExpressionCodegen extends JetVisitor {
return funDescriptor; return funDescriptor;
} }
private void invokeMethodWithArguments(CallableMethod callableMethod, JetCallExpression expression) { public void invokeMethodWithArguments(CallableMethod callableMethod, JetCall expression) {
invokeMethodWithArguments(callableMethod, expression, false); invokeMethodWithArguments(callableMethod, expression, false);
} }
private void invokeMethodWithArguments(CallableMethod callableMethod, JetCallExpression expression, final boolean haveReceiver) { private void invokeMethodWithArguments(CallableMethod callableMethod, JetCall expression, final boolean haveReceiver) {
if (callableMethod.isOwnerFromCall()) { if (callableMethod.isOwnerFromCall()) {
setOwnerFromCall(callableMethod, expression); setOwnerFromCall(callableMethod, expression);
} }
@@ -914,7 +914,7 @@ public class ExpressionCodegen extends JetVisitor {
callableMethod.invoke(v); callableMethod.invoke(v);
} }
private void setOwnerFromCall(CallableMethod callableMethod, JetCallExpression expression) { private void setOwnerFromCall(CallableMethod callableMethod, JetCall expression) {
if (expression.getParent() instanceof JetQualifiedExpression) { if (expression.getParent() instanceof JetQualifiedExpression) {
final JetExpression receiver = ((JetQualifiedExpression) expression.getParent()).getReceiverExpression(); final JetExpression receiver = ((JetQualifiedExpression) expression.getParent()).getReceiverExpression();
JetType expressionType = bindingContext.getExpressionType(receiver); JetType expressionType = bindingContext.getExpressionType(receiver);
@@ -926,7 +926,7 @@ public class ExpressionCodegen extends JetVisitor {
} }
} }
private JetExpression getReceiverForSelector(JetElement expression) { private static JetExpression getReceiverForSelector(PsiElement expression) {
if (expression.getParent() instanceof JetDotQualifiedExpression && !isReceiver(expression)) { if (expression.getParent() instanceof JetDotQualifiedExpression && !isReceiver(expression)) {
final JetDotQualifiedExpression parent = (JetDotQualifiedExpression) expression.getParent(); final JetDotQualifiedExpression parent = (JetDotQualifiedExpression) expression.getParent();
return parent.getReceiverExpression(); return parent.getReceiverExpression();
@@ -934,7 +934,7 @@ public class ExpressionCodegen extends JetVisitor {
return null; return null;
} }
private void ensureReceiverOnStack(JetElement expression, @Nullable ClassDescriptor calleeContainingClass) { private void ensureReceiverOnStack(PsiElement expression, @Nullable ClassDescriptor calleeContainingClass) {
JetExpression receiver = getReceiverForSelector(expression); JetExpression receiver = getReceiverForSelector(expression);
if (receiver != null) { if (receiver != null) {
if (!resolvesToClassOrPackage(receiver)) { if (!resolvesToClassOrPackage(receiver)) {
@@ -1013,7 +1013,7 @@ public class ExpressionCodegen extends JetVisitor {
} }
} }
private static boolean isReceiver(JetElement expression) { private static boolean isReceiver(PsiElement expression) {
final PsiElement parent = expression.getParent(); final PsiElement parent = expression.getParent();
if (parent instanceof JetQualifiedExpression) { if (parent instanceof JetQualifiedExpression) {
final JetExpression receiverExpression = ((JetQualifiedExpression) parent).getReceiverExpression(); final JetExpression receiverExpression = ((JetQualifiedExpression) parent).getReceiverExpression();
@@ -330,13 +330,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen {
} }
CallableMethod method = state.getTypeMapper().mapToCallableMethod(constructorDescriptor, kind); CallableMethod method = state.getTypeMapper().mapToCallableMethod(constructorDescriptor, kind);
List<JetArgument> args = constructorCall.getValueArguments(); codegen.invokeMethodWithArguments(method, constructorCall);
for (int i = 0, argsSize = args.size(); i < argsSize; i++) {
JetArgument arg = args.get(i);
codegen.gen(arg.getArgumentExpression(), method.getValueParameterTypes().get(i));
}
method.invoke(iv);
} }
@Override @Override
@@ -1,5 +1,6 @@
package org.jetbrains.jet.lang.psi; package org.jetbrains.jet.lang.psi;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@@ -8,7 +9,7 @@ import java.util.List;
/** /**
* @author abreslav * @author abreslav
*/ */
public interface JetCall { public interface JetCall extends PsiElement {
@Nullable @Nullable
JetArgumentList getValueArgumentList(); JetArgumentList getValueArgumentList();