diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index bbca007f954..12c0556fd90 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -4,9 +4,11 @@
-
+
+
+
@@ -201,27 +203,9 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -234,16 +218,34 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
@@ -258,7 +260,7 @@
-
+
@@ -318,10 +320,10 @@
-
+
-
+
@@ -377,17 +379,19 @@
-
+
-
-
+
+
-
-
+
+
+
+
@@ -424,10 +428,10 @@
-
-
-
+
+
+
@@ -1195,7 +1199,7 @@
-
+
@@ -1238,7 +1242,7 @@
-
+
@@ -1251,7 +1255,6 @@
-
@@ -1276,6 +1279,7 @@
+
@@ -1285,57 +1289,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1364,9 +1317,9 @@
-
+
-
+
@@ -1378,29 +1331,80 @@
-
+
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java
index 5cf22bf19fa..76526c24dae 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/CallTranslator.java
@@ -55,7 +55,7 @@ public final class CallTranslator extends AbstractTranslator {
@NotNull TranslationContext context) {
DeclarationDescriptor descriptor =
getFunctionDescriptorForCallExpression(context.bindingContext(), callExpression);
- JsExpression receiver = ReferenceTranslator.getImplicitReceiver(descriptor, context);
+ JsExpression receiver = getImplicitReceiver(context, descriptor);
List arguments = translateArgumentList(context, callExpression.getValueArguments());
return (new CallTranslator(receiver, arguments, (FunctionDescriptor) descriptor, context)).translate();
}
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
index 8dc2386237b..47a4b0aea9a 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
@@ -21,6 +21,7 @@ import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForRe
import static org.jetbrains.k2js.translate.utils.PsiUtils.getSelectorAsSimpleName;
import static org.jetbrains.k2js.translate.utils.PsiUtils.isBackingFieldReference;
import static org.jetbrains.k2js.translate.utils.TranslationUtils.backingFieldReference;
+import static org.jetbrains.k2js.translate.utils.TranslationUtils.getImplicitReceiver;
/**
* @author Talanov Pavel
@@ -196,7 +197,7 @@ public final class PropertyAccessTranslator extends AccessTranslator {
if (qualifier != null) {
return Translation.translateAsExpression(qualifier, context());
}
- JsExpression implicitReceiver = ReferenceTranslator.getImplicitReceiver(propertyDescriptor, context());
+ JsExpression implicitReceiver = getImplicitReceiver(context(), propertyDescriptor);
assert implicitReceiver != null : "Property can only be a member of class or a namespace.";
return implicitReceiver;
}
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
index 25bcbbc3560..b278ce4a7f4 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
@@ -9,30 +9,15 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.AbstractTranslator;
-import org.jetbrains.k2js.translate.utils.BindingUtils;
-import org.jetbrains.k2js.translate.utils.TranslationUtils;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getDescriptorForReferenceExpression;
+import static org.jetbrains.k2js.translate.utils.TranslationUtils.getImplicitReceiver;
/**
* @author Talanov Pavel
*/
public class ReferenceTranslator extends AbstractTranslator {
- // TODO: move to other util
- @Nullable
- public static JsExpression getImplicitReceiver(@NotNull DeclarationDescriptor referencedDescriptor,
- @NotNull TranslationContext context) {
- if (!context.isDeclared(referencedDescriptor)) return null;
-
- if (BindingUtils.isOwnedByClass(referencedDescriptor)) {
- return TranslationUtils.getThisQualifier(context);
- }
- if (!BindingUtils.isOwnedByNamespace(referencedDescriptor)) return null;
-
- return context.declarations().getQualifier(referencedDescriptor);
- }
-
@NotNull
public static JsExpression translateSimpleName(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
@@ -41,25 +26,30 @@ public class ReferenceTranslator extends AbstractTranslator {
}
DeclarationDescriptor referencedDescriptor =
getDescriptorForReferenceExpression(context.bindingContext(), expression);
- return (new ReferenceTranslator(referencedDescriptor, context)).translate();
+ return (new ReferenceTranslator(referencedDescriptor, true, context)).translate();
}
@NotNull
public static JsExpression translateReference(@NotNull DeclarationDescriptor referencedDescriptor,
@NotNull TranslationContext context) {
- return (new ReferenceTranslator(referencedDescriptor, context)).translate();
+ return (new ReferenceTranslator(referencedDescriptor, false, context)).translate();
}
@NotNull
private final DeclarationDescriptor referencedDescriptor;
+ private final boolean shouldQualify;
+
@Nullable
private JsExpression result;
- private ReferenceTranslator(@NotNull DeclarationDescriptor referencedDescriptor, @NotNull TranslationContext context) {
+ private ReferenceTranslator(@NotNull DeclarationDescriptor referencedDescriptor,
+ boolean shouldQualify,
+ @NotNull TranslationContext context) {
super(context);
this.referencedDescriptor = referencedDescriptor;
this.result = null;
+ this.shouldQualify = shouldQualify;
}
@NotNull
@@ -87,16 +77,12 @@ public class ReferenceTranslator extends AbstractTranslator {
if (!context().isDeclared(referencedDescriptor)) return;
JsName referencedName = context().getNameForDescriptor(referencedDescriptor);
- JsExpression implicitReceiver = getImplicitReceiver(referencedDescriptor, context());
+ JsExpression implicitReceiver = getImplicitReceiver(context(), referencedDescriptor);
- generateReference(referencedName, implicitReceiver);
- }
-
- private void generateReference(@NotNull JsName referencedName, @Nullable JsExpression implicitReceiver) {
- if (implicitReceiver != null) {
+ if (shouldQualify && implicitReceiver != null) {
result = AstUtil.qualified(referencedName, implicitReceiver);
} else {
- result = context().getNameForDescriptor(referencedDescriptor).makeRef();
+ result = referencedName.makeRef();
}
}
diff --git a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java
index 2773d3f8116..60382849dcb 100644
--- a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java
+++ b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java
@@ -220,5 +220,4 @@ public final class TranslationUtils {
return context.declarations().getQualifier(referencedDescriptor);
}
-
}