diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4d566126bbc..f379267dcaa 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -14,23 +14,7 @@ - - - - - - - - - - - - - - - - @@ -233,24 +217,6 @@ - - - - - - - - - - - - - - - - - - @@ -314,10 +280,28 @@ - + - + + + + + + + + + + + + + + + + + + + @@ -408,10 +392,10 @@ @@ -1202,7 +1186,7 @@ - + @@ -1223,7 +1207,7 @@ - + @@ -1265,7 +1249,7 @@ @@ -1312,15 +1296,6 @@ - - - - - - - - - @@ -1330,13 +1305,6 @@ - - - - - - - @@ -1423,7 +1391,21 @@ - + + + + + + + + + + + + + + + diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java index b162b567bfa..9134489f70a 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java @@ -33,40 +33,60 @@ public final class PropertyAccessTranslator extends AccessTranslator { "can be called safely."; + @NotNull + private static PropertyDescriptor getPropertyDescriptor(@NotNull JetSimpleNameExpression expression, + @NotNull TranslationContext context) { + DeclarationDescriptor descriptor = + getDescriptorForReferenceExpression(context.bindingContext(), expression); + assert descriptor instanceof PropertyDescriptor : "Must be a property descriptor."; + return (PropertyDescriptor) descriptor; + } + @NotNull public static JsExpression translateAsPropertyGetterCall(@NotNull JetQualifiedExpression expression, @NotNull TranslationContext context) { - return (new PropertyAccessTranslator(expression, context)) + return (newInstance(expression, context)) .translateAsGet(); } @NotNull public static JsExpression translateAsPropertyGetterCall(@NotNull PropertyDescriptor descriptor, @NotNull TranslationContext context) { - return (new PropertyAccessTranslator(descriptor, context)) + return (newInstance(descriptor, context)) .translateAsGet(); } - - @NotNull - public static PropertyAccessTranslator newInstance(@NotNull JetQualifiedExpression expression, - @NotNull TranslationContext context) { - return (new PropertyAccessTranslator(expression, context)); - } - - @NotNull - public static PropertyAccessTranslator newInstance(@NotNull JetSimpleNameExpression expression, - @NotNull TranslationContext context) { - return (new PropertyAccessTranslator(expression, context)); - } - @NotNull public static JsExpression translateAsPropertyGetterCall(@NotNull JetSimpleNameExpression expression, @NotNull TranslationContext context) { - return (new PropertyAccessTranslator(expression, context)) + return (newInstance(expression, context)) .translateAsGet(); } + @NotNull + private static PropertyAccessTranslator newInstance(@NotNull PropertyDescriptor descriptor, + @NotNull TranslationContext context) { + return new PropertyAccessTranslator(descriptor, null, false, context); + } + + @NotNull + public static PropertyAccessTranslator newInstance(@NotNull JetQualifiedExpression expression, + @NotNull TranslationContext context) { + JetExpression qualifier = expression.getReceiverExpression(); + JetSimpleNameExpression selector = getNotNullSelector(expression); + PropertyDescriptor propertyDescriptor = getPropertyDescriptor(selector, context); + boolean isBackingFieldAccess = isBackingFieldReference(selector); + return new PropertyAccessTranslator(propertyDescriptor, qualifier, isBackingFieldAccess, context); + } + + @NotNull + public static PropertyAccessTranslator newInstance(@NotNull JetSimpleNameExpression expression, + @NotNull TranslationContext context) { + PropertyDescriptor propertyDescriptor = getPropertyDescriptor(expression, context); + return new PropertyAccessTranslator(propertyDescriptor, null, isBackingFieldReference(expression), context); + } + + @NotNull public static PropertyAccessTranslator newInstance(@NotNull JetExpression expression, @NotNull TranslationContext context) { @@ -116,30 +136,14 @@ public final class PropertyAccessTranslator extends AccessTranslator { private final PropertyDescriptor propertyDescriptor; private final boolean isBackingFieldAccess; - //TODO: make one constructor - private PropertyAccessTranslator(@NotNull JetSimpleNameExpression simpleName, - @NotNull TranslationContext context) { - super(context); - this.qualifier = null; - this.propertyDescriptor = getPropertyDescriptor(simpleName).getOriginal(); - this.isBackingFieldAccess = isBackingFieldReference(simpleName); - } - - private PropertyAccessTranslator(@NotNull JetQualifiedExpression qualifiedExpression, - @NotNull TranslationContext context) { - super(context); - this.qualifier = qualifiedExpression.getReceiverExpression(); - JetSimpleNameExpression selector = getNotNullSelector(qualifiedExpression); - this.propertyDescriptor = getPropertyDescriptor(selector).getOriginal(); - this.isBackingFieldAccess = isBackingFieldReference(selector); - } - private PropertyAccessTranslator(@NotNull PropertyDescriptor descriptor, + @Nullable JetExpression qualifier, + boolean isBackingFieldAccess, @NotNull TranslationContext context) { super(context); - this.qualifier = null; + this.qualifier = qualifier; this.propertyDescriptor = descriptor.getOriginal(); - this.isBackingFieldAccess = false; + this.isBackingFieldAccess = isBackingFieldAccess; } @Override @@ -226,6 +230,7 @@ public final class PropertyAccessTranslator extends AccessTranslator { if (context().isStandardObject(propertyDescriptor)) { return context().getNameForStandardObject(propertyDescriptor); } + PropertyGetterDescriptor getter = getGetterDescriptor(); return context().getNameForDescriptor(getter); } @@ -250,12 +255,4 @@ public final class PropertyAccessTranslator extends AccessTranslator { return setter; } - @NotNull - private PropertyDescriptor getPropertyDescriptor(@NotNull JetSimpleNameExpression expression) { - DeclarationDescriptor descriptor = - getDescriptorForReferenceExpression(context().bindingContext(), expression); - //TODO - assert descriptor instanceof PropertyDescriptor; - return (PropertyDescriptor) descriptor; - } }