get rid of the rest of translate methods in CallTranslator
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
+22
-5
@@ -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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user