From df1c0453e6ae648ae0c22a04e4f888c9d9a434d5 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Wed, 7 Dec 2011 16:30:01 +0400 Subject: [PATCH] move aliasing into context. array size works. --- .idea/workspace.xml | 218 +++++++++--------- .../k2js/translate/context/Aliaser.java | 4 +- .../translate/context/TranslationContext.java | 3 + .../declaration/ClassTranslator.java | 2 +- .../reference/PropertyAccessTranslator.java | 3 + .../reference/ReferenceTranslator.java | 36 +-- 6 files changed, 122 insertions(+), 144 deletions(-) diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 84831b741b3..148b2e3c169 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -5,18 +5,12 @@ - - - - - + + - - - - + @@ -210,13 +204,13 @@ - + - + - + @@ -225,7 +219,7 @@ - + @@ -260,10 +254,10 @@ - + - + @@ -309,26 +303,6 @@ - - - - - - - - - - - - - - - - - - - - @@ -374,19 +348,19 @@ - + - + - - + + - + @@ -394,10 +368,30 @@ - + + + + + + + + + + + + + + + + + + + + + - + @@ -424,9 +418,6 @@ @@ -1259,7 +1253,7 @@ @@ -1306,64 +1300,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -1406,18 +1342,80 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/translator/src/org/jetbrains/k2js/translate/context/Aliaser.java b/translator/src/org/jetbrains/k2js/translate/context/Aliaser.java index eac696cbbb5..2e0600e0a1f 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/Aliaser.java +++ b/translator/src/org/jetbrains/k2js/translate/context/Aliaser.java @@ -62,10 +62,10 @@ public class Aliaser { } @NotNull - public JsNameRef getAliasForDeclaration(@NotNull DeclarationDescriptor declaration) { + public JsName getAliasForDeclaration(@NotNull DeclarationDescriptor declaration) { JsName alias = aliases.get(declaration.getOriginal()); assert alias != null : "Use has alias for declaration to check."; - return alias.makeRef(); + return alias; } public void setAliasForDescriptor(@NotNull DeclarationDescriptor declaration, @NotNull JsName alias) { diff --git a/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index 66be31bb674..7d9de98768d 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -92,6 +92,9 @@ public final class TranslationContext { @NotNull public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) { + if (aliaser().hasAliasForDeclaration(descriptor)) { + return aliaser().getAliasForDeclaration(descriptor); + } if (dynamicContext.isDeclared(descriptor)) { return dynamicContext.getLocalName(descriptor); } diff --git a/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index 67c93fbf683..2d52e8e6eee 100644 --- a/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -104,7 +104,7 @@ public final class ClassTranslator extends AbstractTranslator { private JsNameRef getClassReference(@NotNull ClassDescriptor superClassDescriptor) { //TODO we actually know that in current implementation superclass must have an alias but // in future it might change - return context().aliaser().getAliasForDeclaration(superClassDescriptor); + return context().aliaser().getAliasForDeclaration(superClassDescriptor).makeRef(); } @Nullable diff --git a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java index 981403526c8..a469e03dcb6 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/PropertyAccessTranslator.java @@ -212,6 +212,9 @@ public final class PropertyAccessTranslator extends AccessTranslator { @NotNull private JsName getGetterName() { + if (context().aliaser().hasAliasForDeclaration(propertyDescriptor)) { + return context().aliaser().getAliasForDeclaration(propertyDescriptor); + } PropertyGetterDescriptor getter = getGetterDescriptor(); return context().getNameForDescriptor(getter); } diff --git a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java index b278ce4a7f4..957ae797f7c 100644 --- a/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java +++ b/translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java @@ -4,7 +4,6 @@ import com.google.dart.compiler.backend.js.ast.JsExpression; import com.google.dart.compiler.backend.js.ast.JsName; import com.google.dart.compiler.util.AstUtil; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.psi.JetSimpleNameExpression; import org.jetbrains.k2js.translate.context.TranslationContext; @@ -40,53 +39,28 @@ public class ReferenceTranslator extends AbstractTranslator { private final boolean shouldQualify; - @Nullable - private JsExpression result; - private ReferenceTranslator(@NotNull DeclarationDescriptor referencedDescriptor, boolean shouldQualify, @NotNull TranslationContext context) { super(context); this.referencedDescriptor = referencedDescriptor; - this.result = null; this.shouldQualify = shouldQualify; } + //TODO: refactor @NotNull public JsExpression translate() { - tryResolveAsAlias(); - tryResolveAsReference(); - if (result != null) { - return result; + if (!context().isDeclared(referencedDescriptor)) { + throw new AssertionError("Undefined name in this scope: " + referencedDescriptor.getName()); } - throw new AssertionError("Undefined name in this scope: " + referencedDescriptor.getName()); - } - - private void tryResolveAsAlias() { - if (alreadyResolved()) return; - - if (!context().aliaser().hasAliasForDeclaration(referencedDescriptor)) return; - - result = context().aliaser().getAliasForDeclaration(referencedDescriptor); - } - - - private void tryResolveAsReference() { - if (alreadyResolved()) return; - - if (!context().isDeclared(referencedDescriptor)) return; JsName referencedName = context().getNameForDescriptor(referencedDescriptor); JsExpression implicitReceiver = getImplicitReceiver(context(), referencedDescriptor); if (shouldQualify && implicitReceiver != null) { - result = AstUtil.qualified(referencedName, implicitReceiver); + return AstUtil.qualified(referencedName, implicitReceiver); } else { - result = referencedName.makeRef(); + return referencedName.makeRef(); } } - - private boolean alreadyResolved() { - return result != null; - } }