fix "enclosingThis" bug

This commit is contained in:
Pavel Talanov
2011-12-05 17:47:20 +04:00
parent 677c1a5ad3
commit c7a4d724a0
2 changed files with 18 additions and 4 deletions
@@ -14,7 +14,6 @@ import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic; import org.jetbrains.k2js.translate.intrinsic.FunctionIntrinsic;
import org.jetbrains.k2js.translate.utils.TranslationUtils; import org.jetbrains.k2js.translate.utils.TranslationUtils;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
@@ -116,12 +115,12 @@ public final class CallTranslator extends AbstractTranslator {
@NotNull @NotNull
private JsExpression calleeReference() { private JsExpression calleeReference() {
//TODO: refactor //TODO: refactor
//TODO: write tests on this cases
if (descriptor instanceof VariableAsFunctionDescriptor) { if (descriptor instanceof VariableAsFunctionDescriptor) {
VariableDescriptor variableDescriptor = ((VariableAsFunctionDescriptor) descriptor).getVariableDescriptor(); VariableDescriptor variableDescriptor = ((VariableAsFunctionDescriptor) descriptor).getVariableDescriptor();
if (variableDescriptor instanceof PropertyDescriptor) { if (variableDescriptor instanceof PropertyDescriptor) {
PropertyGetterDescriptor getter = ((PropertyDescriptor) variableDescriptor).getGetter(); PropertyDescriptor propertyDescriptor = (PropertyDescriptor) variableDescriptor;
assert getter != null; return PropertyAccessTranslator.translateAsPropertyGetterCall(propertyDescriptor, context());
return (new CallTranslator(null, new ArrayList<JsExpression>(), getter, context())).translate();
} }
} }
if (context().isDeclared(descriptor)) { if (context().isDeclared(descriptor)) {
@@ -35,6 +35,14 @@ public final class PropertyAccessTranslator extends AccessTranslator {
.translateAsGet(); .translateAsGet();
} }
@NotNull
public static JsExpression translateAsPropertyGetterCall(@NotNull PropertyDescriptor descriptor,
@NotNull TranslationContext context) {
return (new PropertyAccessTranslator(descriptor, context))
.translateAsGet();
}
@NotNull @NotNull
public static PropertyAccessTranslator newInstance(@NotNull JetQualifiedExpression expression, public static PropertyAccessTranslator newInstance(@NotNull JetQualifiedExpression expression,
@NotNull TranslationContext context) { @NotNull TranslationContext context) {
@@ -115,6 +123,13 @@ public final class PropertyAccessTranslator extends AccessTranslator {
this.propertyDescriptor = getPropertyDescriptor(getNotNullSelector(qualifiedExpression)); this.propertyDescriptor = getPropertyDescriptor(getNotNullSelector(qualifiedExpression));
} }
private PropertyAccessTranslator(@NotNull PropertyDescriptor descriptor,
@NotNull TranslationContext context) {
super(context);
this.qualifier = null;
this.propertyDescriptor = descriptor;
}
@Override @Override
@NotNull @NotNull
public JsExpression translateAsGet() { public JsExpression translateAsGet() {