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 @@
-
+
@@ -1272,7 +1266,6 @@
-
@@ -1297,6 +1290,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;
- }
}