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 @@ @@ -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); }