diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index e814738a3bb..d633e24302b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -15,10 +15,11 @@
-
-
+
+
+
@@ -154,7 +155,7 @@
-
+
@@ -265,7 +266,7 @@
-
+
@@ -276,7 +277,16 @@
-
+
+
+
+
+
+
+
+
+
+
@@ -285,16 +295,25 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
-
+
@@ -309,24 +328,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -352,7 +353,7 @@
-
+
@@ -456,8 +457,6 @@
@@ -1062,7 +1063,7 @@
-
+
@@ -1432,7 +1433,7 @@
-
+
@@ -1452,7 +1453,7 @@
-
+
@@ -1497,7 +1498,7 @@
-
+
@@ -1510,7 +1511,6 @@
-
@@ -1535,6 +1535,7 @@
+
@@ -1544,31 +1545,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1597,13 +1573,6 @@
-
-
-
-
-
-
-
@@ -1611,13 +1580,6 @@
-
-
-
-
-
-
-
@@ -1650,18 +1612,53 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
+
-
+
diff --git a/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java b/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java
index fd3136a0e82..9c9b5f49da0 100644
--- a/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/expression/QualifiedExpressionTranslator.java
@@ -6,8 +6,10 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.k2js.translate.context.TemporaryVariable;
import org.jetbrains.k2js.translate.context.TranslationContext;
+import org.jetbrains.k2js.translate.reference.AccessTranslator;
import org.jetbrains.k2js.translate.reference.CallTranslator;
import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator;
+import org.jetbrains.k2js.translate.utils.PsiUtils;
import static org.jetbrains.k2js.translate.general.Translation.translateAsExpression;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.notNullCheck;
@@ -20,6 +22,16 @@ public final class QualifiedExpressionTranslator {
private QualifiedExpressionTranslator() {
}
+ @NotNull
+ public static AccessTranslator getAccessTranslator(@NotNull JetQualifiedExpression expression,
+ @NotNull TranslationContext context) {
+ if (expression instanceof JetDotQualifiedExpression) {
+ JsExpression receiver = translateReceiver(expression, context);
+ return PropertyAccessTranslator.newInstance(PsiUtils.getSelectorAsSimpleName(expression), receiver, context);
+ }
+ throw new UnsupportedOperationException();
+ }
+
@NotNull
public static JsExpression translateSafeQualifiedExpression(@NotNull JetSafeQualifiedExpression expression,
@NotNull TranslationContext context) {
@@ -35,15 +47,15 @@ public final class QualifiedExpressionTranslator {
@NotNull
public static JsExpression translateDotQualifiedExpression(@NotNull JetDotQualifiedExpression expression,
@NotNull TranslationContext context) {
- //TODO: problem with extension properties lies here
- //TODO: problem with extension properties lies here
- if (PropertyAccessTranslator.canBePropertyGetterCall(expression, context)) {
- return PropertyAccessTranslator.translateAsPropertyGetterCall(expression, context);
- }
if (expression.getSelectorExpression() instanceof JetCallExpression) {
return CallTranslator.translate(expression, context);
}
+ //TODO: problem with extension properties lies here
JsExpression receiver = translateReceiver(expression, context);
+ if (PropertyAccessTranslator.canBePropertyGetterCall(expression, context)) {
+ return PropertyAccessTranslator.translateAsPropertyGetterCall
+ (PsiUtils.getSelectorAsSimpleName(expression), receiver, context);
+ }
JsExpression selector = translateSelector(expression, context);
return composeQualifiedExpression(receiver, selector);
}
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java
index 2e3e43af23e..803ede6fc4b 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/AccessTranslator.java
@@ -4,6 +4,7 @@ import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.k2js.translate.context.TranslationContext;
+import org.jetbrains.k2js.translate.expression.QualifiedExpressionTranslator;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
/**
@@ -16,8 +17,12 @@ public abstract class AccessTranslator extends AbstractTranslator {
@NotNull TranslationContext context) {
assert ((referenceExpression instanceof JetReferenceExpression) ||
(referenceExpression instanceof JetDotQualifiedExpression));
+ //TODO:
if (PropertyAccessTranslator.canBePropertyAccess(referenceExpression, context)) {
- return PropertyAccessTranslator.newInstance(referenceExpression, context);
+ if (referenceExpression instanceof JetQualifiedExpression) {
+ return QualifiedExpressionTranslator.getAccessTranslator((JetQualifiedExpression) referenceExpression, context);
+ }
+ return PropertyAccessTranslator.newInstance((JetSimpleNameExpression) referenceExpression, null, context);
}
if (referenceExpression instanceof JetArrayAccessExpression) {
return ArrayAccessTranslator.newInstance((JetArrayAccessExpression) referenceExpression, context);
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
index fd26d1a18b6..69ef377834b 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
@@ -12,7 +12,6 @@ import org.jetbrains.jet.lang.psi.JetQualifiedExpression;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.resolve.calls.ResolvedCall;
import org.jetbrains.k2js.translate.context.TranslationContext;
-import org.jetbrains.k2js.translate.general.Translation;
import java.util.Arrays;
@@ -49,15 +48,9 @@ public final class PropertyAccessTranslator extends AccessTranslator {
@NotNull
public static JsExpression translateAsPropertyGetterCall(@NotNull JetSimpleNameExpression expression,
+ @Nullable JsExpression qualifier,
@NotNull TranslationContext context) {
- return (newInstance(expression, context))
- .translateAsGet();
- }
-
- @NotNull
- public static JsExpression translateAsPropertyGetterCall(@NotNull JetQualifiedExpression expression,
- @NotNull TranslationContext context) {
- return (newInstance(expression, context))
+ return (newInstance(expression, qualifier, context))
.translateAsGet();
}
@@ -68,38 +61,15 @@ public final class PropertyAccessTranslator extends AccessTranslator {
return new PropertyAccessTranslator(descriptor, null, false, resolvedCall, context);
}
- @NotNull
- public static PropertyAccessTranslator newInstance(@NotNull JetQualifiedExpression expression,
- @NotNull TranslationContext context) {
- JetExpression qualifier = expression.getReceiverExpression();
- JetSimpleNameExpression selector = getNotNullSelector(expression);
- ResolvedCall> resolvedCall = getResolvedCall(context.bindingContext(), selector);
- PropertyDescriptor propertyDescriptor = getPropertyDescriptor(selector, context);
- boolean isBackingFieldAccess = isBackingFieldReference(selector);
- JsExpression jsQualifier = Translation.translateAsExpression(qualifier, context);
- return new PropertyAccessTranslator(propertyDescriptor, jsQualifier,
- isBackingFieldAccess, resolvedCall, context);
- }
-
@NotNull
public static PropertyAccessTranslator newInstance(@NotNull JetSimpleNameExpression expression,
+ @Nullable JsExpression qualifier,
@NotNull TranslationContext context) {
PropertyDescriptor propertyDescriptor = getPropertyDescriptor(expression, context);
ResolvedCall> resolvedCall = getResolvedCall(context.bindingContext(), expression);
- return new PropertyAccessTranslator(propertyDescriptor, null,
- isBackingFieldReference(expression), resolvedCall, context);
- }
-
- @NotNull
- public static PropertyAccessTranslator newInstance(@NotNull JetExpression expression,
- @NotNull TranslationContext context) {
- if (expression instanceof JetQualifiedExpression) {
- return newInstance((JetQualifiedExpression) expression, context);
- }
- if (expression instanceof JetSimpleNameExpression) {
- return newInstance((JetSimpleNameExpression) expression, context);
- }
- throw new AssertionError(MESSAGE);
+ boolean backingFieldAccess = isBackingFieldReference(expression);
+ return new PropertyAccessTranslator(propertyDescriptor, qualifier,
+ backingFieldAccess, resolvedCall, context);
}
public static boolean canBePropertyGetterCall(@NotNull JetQualifiedExpression expression,
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
index 571cd1a4592..d45b7b8d52d 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
@@ -21,7 +21,7 @@ public final class ReferenceTranslator {
public static JsExpression translateSimpleName(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
if (PropertyAccessTranslator.canBePropertyAccess(expression, context)) {
- return PropertyAccessTranslator.translateAsPropertyGetterCall(expression, context);
+ return PropertyAccessTranslator.translateAsPropertyGetterCall(expression, null, context);
}
DeclarationDescriptor referencedDescriptor =
getDescriptorForReferenceExpression(context.bindingContext(), expression);