"field": refactoring, isBackingFieldReference, referencedProperty

This commit is contained in:
Mikhail Glukhikh
2015-09-21 11:28:08 +03:00
parent ad302fcfba
commit 831df27cac
5 changed files with 22 additions and 22 deletions
@@ -18,9 +18,8 @@ package org.jetbrains.kotlin.js.translate.reference;
import com.google.dart.compiler.backend.js.ast.JsExpression;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.descriptors.PropertyDescriptor;
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptor;
import org.jetbrains.kotlin.descriptors.impl.SyntheticFieldDescriptorKt;
import org.jetbrains.kotlin.js.translate.context.TemporaryVariable;
import org.jetbrains.kotlin.js.translate.context.TranslationContext;
import org.jetbrains.kotlin.js.translate.general.AbstractTranslator;
@@ -41,12 +40,11 @@ public final class BackingFieldAccessTranslator extends AbstractTranslator imple
/*package*/
public static BackingFieldAccessTranslator newInstance(@NotNull JetSimpleNameExpression expression,
@NotNull TranslationContext context) {
DeclarationDescriptor referencedProperty = getDescriptorForReferenceExpression(context.bindingContext(), expression);
if (referencedProperty instanceof SyntheticFieldDescriptor) {
referencedProperty = ((SyntheticFieldDescriptor) referencedProperty).getPropertyDescriptor();
}
assert referencedProperty instanceof PropertyDescriptor;
return new BackingFieldAccessTranslator((PropertyDescriptor) referencedProperty, context);
PropertyDescriptor referencedProperty = SyntheticFieldDescriptorKt.getReferencedProperty(
getDescriptorForReferenceExpression(context.bindingContext(), expression)
);
assert referencedProperty != null;
return new BackingFieldAccessTranslator(referencedProperty, context);
}
private BackingFieldAccessTranslator(@NotNull PropertyDescriptor descriptor, @NotNull TranslationContext context) {
@@ -104,8 +104,7 @@ public final class ReferenceTranslator {
public static AccessTranslator getAccessTranslator(@NotNull JetSimpleNameExpression referenceExpression,
@Nullable JsExpression receiver,
@NotNull TranslationContext context) {
if (getDescriptorForReferenceExpression(context.bindingContext(), referenceExpression) instanceof SyntheticFieldDescriptor
|| isBackingFieldReference(referenceExpression)) {
if (isBackingFieldReference(referenceExpression, getDescriptorForReferenceExpression(context.bindingContext(), referenceExpression))) {
return BackingFieldAccessTranslator.newInstance(referenceExpression, context);
}
if (canBePropertyAccess(referenceExpression, context)) {