get rid of the rest of translate methods in CallTranslator

This commit is contained in:
Pavel Talanov
2012-02-12 16:48:01 +04:00
parent c505ecc846
commit 4abf0db10c
3 changed files with 38 additions and 32 deletions
@@ -4,7 +4,6 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.psi.JetArrayAccessExpression;
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.utils.BindingUtils;
@@ -17,6 +16,8 @@ import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForRe
/**
* @author Pavel Talanov
*/
//TODO: inspect not clear how the class handles set and get operations differently
public final class ArrayAccessTranslator extends AccessTranslator {
/*package*/
@@ -34,6 +35,7 @@ public final class ArrayAccessTranslator extends AccessTranslator {
@NotNull TranslationContext context) {
super(context);
this.expression = expression;
//TODO: that is strange
this.methodDescriptor = (FunctionDescriptor)
getDescriptorForReferenceExpression(context.bindingContext(), expression);
}
@@ -41,20 +43,27 @@ public final class ArrayAccessTranslator extends AccessTranslator {
@Override
@NotNull
public JsExpression translateAsGet() {
ResolvedCall<?> resolvedCall = BindingUtils.getResolvedCall(context().bindingContext(), expression);
List<JsExpression> arguments = translateIndexExpressions();
return CallTranslator.translate(translateArrayExpression(), arguments, resolvedCall,
methodDescriptor, CallType.NORMAL, context());
return translateAsMethodCall(arguments);
}
@Override
@NotNull
public JsExpression translateAsSet(@NotNull JsExpression expression) {
ResolvedCall<?> resolvedCall = BindingUtils.getResolvedCall(context().bindingContext(), this.expression);
List<JsExpression> arguments = translateIndexExpressions();
arguments.add(expression);
return CallTranslator.translate(translateArrayExpression(), arguments, resolvedCall,
methodDescriptor, CallType.NORMAL, context());
return translateAsMethodCall(arguments);
}
@NotNull
private JsExpression translateAsMethodCall(@NotNull List<JsExpression> arguments) {
return CallBuilder.build(context())
.receiver(translateArrayExpression())
.args(arguments)
.resolvedCall(BindingUtils.getResolvedCall(context().bindingContext(), expression))
.descriptor(methodDescriptor)
.translate();
}
@NotNull
@@ -17,7 +17,6 @@ import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import org.jetbrains.k2js.translate.utils.TranslationUtils;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static org.jetbrains.k2js.translate.utils.DescriptorUtils.*;
@@ -43,25 +42,6 @@ public final class CallTranslator extends AbstractTranslator {
public /*var*/ JsExpression functionReference;
}
@NotNull
public static JsExpression translate(@Nullable JsExpression receiver,
@NotNull ResolvedCall<?> resolvedCall,
@Nullable CallableDescriptor descriptorToCall,
@NotNull CallType callType,
@NotNull TranslationContext context) {
return (new CallTranslator(receiver, null, Collections.<JsExpression>emptyList(), resolvedCall,
descriptorToCall, CallType.SAFE, context)).translate();
}
@NotNull
public static JsExpression translate(@Nullable JsExpression receiver, @NotNull List<JsExpression> arguments,
@NotNull ResolvedCall<?> resolvedCall,
@Nullable CallableDescriptor descriptorToCall,
@NotNull CallType callType,
@NotNull TranslationContext context) {
return (new CallTranslator(receiver, null, arguments, resolvedCall, descriptorToCall, callType, context)).translate();
}
@Nullable
private /*var*/ JsExpression receiver;
@@ -4,11 +4,11 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertyGetterDescriptor;
import org.jetbrains.jet.lang.descriptors.PropertySetterDescriptor;
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
import org.jetbrains.k2js.translate.context.TranslationContext;
import java.util.Arrays;
/**
* @author Pavel Talanov
* <p/>
@@ -37,15 +37,32 @@ public final class KotlinPropertyAccessTranslator extends PropertyAccessTranslat
@Override
@NotNull
public JsExpression translateAsGet() {
return CallTranslator.translate(qualifier, resolvedCall, propertyDescriptor.getGetter(), getCallType(), context());
//TODO: check for duplication
PropertyGetterDescriptor getter = propertyDescriptor.getGetter();
assert getter != null : "Getter for kotlin properties should bot be null.";
return callBuilderForAccessor()
.descriptor(getter)
.translate();
}
@Override
@NotNull
public JsExpression translateAsSet(@NotNull JsExpression toSetTo) {
//TODO: check for duplication
PropertySetterDescriptor setter = propertyDescriptor.getSetter();
assert setter != null : "Getter for kotlin properties should bot be null.";
return callBuilderForAccessor()
.args(toSetTo)
.descriptor(setter)
.translate();
}
return CallTranslator.translate(qualifier, Arrays.asList(toSetTo),
resolvedCall, propertyDescriptor.getSetter(), getCallType(), context());
@NotNull
private CallBuilder callBuilderForAccessor() {
return CallBuilder.build(context())
.receiver(qualifier)
.resolvedCall(resolvedCall)
.type(getCallType());
}
}