diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index d0362e355ce..99bc02b26e7 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -8,48 +8,12 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
@@ -160,7 +124,7 @@
-
+
@@ -176,7 +140,9 @@
-
+
+
+
@@ -220,16 +186,34 @@
-
+
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -251,10 +235,8 @@
-
-
-
-
+
+
@@ -275,7 +257,9 @@
-
+
+
+
@@ -307,19 +291,19 @@
-
+
-
+
-
+
-
+
@@ -355,10 +339,6 @@
@@ -985,7 +969,7 @@
-
+
@@ -1002,8 +986,8 @@
-
-
+
+
@@ -1047,7 +1031,7 @@
-
+
@@ -1060,7 +1044,6 @@
-
@@ -1085,6 +1068,7 @@
+
@@ -1094,29 +1078,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1131,13 +1092,6 @@
-
-
-
-
-
-
-
@@ -1151,7 +1105,9 @@
-
+
+
+
@@ -1183,13 +1139,6 @@
-
-
-
-
-
-
-
@@ -1199,14 +1148,49 @@
-
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/translator/src/org/jetbrains/k2js/translate/general/Translation.java b/translator/src/org/jetbrains/k2js/translate/general/Translation.java
index 9e25f9cb70f..63f32d507de 100644
--- a/translator/src/org/jetbrains/k2js/translate/general/Translation.java
+++ b/translator/src/org/jetbrains/k2js/translate/general/Translation.java
@@ -15,7 +15,6 @@ import org.jetbrains.k2js.translate.expression.WhenTranslator;
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
import org.jetbrains.k2js.translate.initializer.NamespaceInitializerTranslator;
import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator;
-import org.jetbrains.k2js.translate.reference.ReferenceProvider;
import org.jetbrains.k2js.translate.reference.ReferenceTranslator;
/**
@@ -96,13 +95,6 @@ public final class Translation {
return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod();
}
- @NotNull
- static public JsNameRef generateCorrectReference(@NotNull TranslationContext context,
- @NotNull JetSimpleNameExpression expression,
- @NotNull JsName referencedName) {
- return (new ReferenceProvider(context, expression, referencedName)).generateCorrectReference();
- }
-
public static void generateAst(@NotNull JsProgram result, @NotNull BindingContext bindingContext,
@NotNull Declarations declarations, @NotNull JetNamespace namespace) {
JsBlock block = result.getFragmentBlock(0);
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
index f1d4d5123de..44d6f941d0a 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java
@@ -20,7 +20,6 @@ import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.general.TranslationContext;
import org.jetbrains.k2js.translate.utils.BindingUtils;
-import org.jetbrains.k2js.translate.utils.TranslationUtils;
/**
* @author Talanov Pavel
@@ -94,7 +93,7 @@ public final class PropertyAccessTranslator extends AbstractTranslator {
@NotNull
private JsInvocation resolveAsPropertyGet(@NotNull JetSimpleNameExpression expression) {
JsName getterName = getNotNullGetterName(expression);
- JsNameRef getterReference = TranslationUtils.getReference(context(), expression, getterName);
+ JsNameRef getterReference = ReferenceProvider.getReference(getterName, context(), expression);
return AstUtil.newInvocation(getterReference);
}
@@ -118,7 +117,7 @@ public final class PropertyAccessTranslator extends AbstractTranslator {
@NotNull
private JsInvocation resolveAsPropertySet(@NotNull JetSimpleNameExpression expression) {
JsName setterName = getNotNullSetterName(expression);
- JsNameRef setterReference = Translation.generateCorrectReference(context(), expression, setterName);
+ JsNameRef setterReference = ReferenceProvider.getReference(setterName, context(), expression);
return AstUtil.newInvocation(setterReference);
}
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceProvider.java b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceProvider.java
index 1262f7f2ad8..7e4e57f1676 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceProvider.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceProvider.java
@@ -17,16 +17,29 @@ public final class ReferenceProvider {
private final TranslationContext context;
@NotNull
private final JsName referencedName;
+ private boolean isBackingFieldAccess;
private boolean requiresThisQualifier;
private boolean requiresNamespaceQualifier;
+ public static JsNameRef getReference(@NotNull JsName referencedName, @NotNull TranslationContext context,
+ boolean isBackingFieldAccess) {
+ return (new ReferenceProvider(referencedName, context, isBackingFieldAccess)).generateCorrectReference();
+ }
- public ReferenceProvider(@NotNull TranslationContext context,
- @NotNull JetSimpleNameExpression expression,
- @NotNull JsName referencedName) {
+
+ public static JsNameRef getReference(@NotNull JsName referencedName, @NotNull TranslationContext context,
+ JetSimpleNameExpression expression) {
+ boolean isBackingFieldAccess = expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER;
+ return (new ReferenceProvider(referencedName, context, isBackingFieldAccess))
+ .generateCorrectReference();
+ }
+
+ private ReferenceProvider(@NotNull JsName referencedName, @NotNull TranslationContext context,
+ boolean isBackingFieldAccess) {
this.context = context;
this.referencedName = referencedName;
- this.requiresThisQualifier = requiresThisQualifier(expression);
+ this.isBackingFieldAccess = isBackingFieldAccess;
+ this.requiresThisQualifier = requiresThisQualifier();
this.requiresNamespaceQualifier = requiresNamespaceQualifier();
}
@@ -44,10 +57,9 @@ public final class ReferenceProvider {
return context.namespaceScope().ownsName(referencedName);
}
- private boolean requiresThisQualifier(@NotNull JetSimpleNameExpression expression) {
+ private boolean requiresThisQualifier() {
JsName name = context.enclosingScope().findExistingName(referencedName.getIdent());
boolean isClassMember = context.classScope().ownsName(name);
- boolean isBackingFieldAccess = expression.getReferencedNameElementType() == JetTokens.FIELD_IDENTIFIER;
return isClassMember || isBackingFieldAccess;
}
}
diff --git a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
index e474a950665..9dd63d67532 100644
--- a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
+++ b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java
@@ -66,7 +66,7 @@ public class ReferenceTranslator extends AbstractTranslator {
return null;
}
JsName referencedName = context().getNameForDescriptor(referencedDescriptor);
- return TranslationUtils.getReference(context(), expression, referencedName);
+ return ReferenceProvider.getReference(referencedName, context(), expression);
}
@Nullable
diff --git a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java
index 2b48825fb9a..26ec095bc35 100644
--- a/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java
+++ b/translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java
@@ -7,7 +7,6 @@ import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.psi.JetProperty;
-import org.jetbrains.jet.lang.psi.JetSimpleNameExpression;
import org.jetbrains.jet.lang.psi.ValueArgument;
import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.general.TranslationContext;
@@ -35,14 +34,6 @@ public final class TranslationUtils {
return AstUtil.equals(expressionToCheck, nullLiteral);
}
- @NotNull
- static public JsNameRef getReference(@NotNull TranslationContext context,
- @NotNull JetSimpleNameExpression expression,
- @NotNull JsName referencedName) {
- return (new ReferenceProvider(context, expression, referencedName)).generateCorrectReference();
- }
-
-
@Nullable
static public JsName getLocalReferencedName(@NotNull TranslationContext context,
@NotNull String name) {
@@ -69,25 +60,24 @@ public final class TranslationUtils {
return Translation.translateAsExpression(jetExpression, context);
}
- //TODO: refactor
@NotNull
static public JsNameRef backingFieldReference(@NotNull TranslationContext context,
@NotNull JetProperty expression) {
JsName backingFieldName = getBackingFieldName(getPropertyName(expression), context);
- if (BindingUtils.belongsToNamespace(context.bindingContext(), expression)) {
- return context.getNamespaceQualifiedReference(backingFieldName);
- }
- return AstUtil.thisQualifiedReference(backingFieldName);
+ return generateReference(context, backingFieldName);
}
@NotNull
static public JsNameRef backingFieldReference(@NotNull TranslationContext context,
@NotNull PropertyDescriptor descriptor) {
JsName backingFieldName = getBackingFieldName(descriptor.getName(), context);
- if (BindingUtils.belongsToNamespace(context.bindingContext(), descriptor)) {
- return context.getNamespaceQualifiedReference(backingFieldName);
- }
- return AstUtil.thisQualifiedReference(backingFieldName);
+ return generateReference(context, backingFieldName);
+ }
+
+ @NotNull
+ private static JsNameRef generateReference(@NotNull TranslationContext context,
+ @NotNull JsName backingFieldName) {
+ return ReferenceProvider.getReference(backingFieldName, context, true);
}
@NotNull
@@ -100,7 +90,8 @@ public final class TranslationUtils {
}
@NotNull
- static private JsName getBackingFieldName(@NotNull String propertyName, @NotNull TranslationContext context) {
+ static private JsName getBackingFieldName(@NotNull String propertyName,
+ @NotNull TranslationContext context) {
String backingFieldName = Namer.getKotlinBackingFieldName(propertyName);
return context.enclosingScope().findExistingName(backingFieldName);
}