diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/AliasingContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/AliasingContext.java index c59c2728e74..c4a77b2560d 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/AliasingContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/AliasingContext.java @@ -27,14 +27,15 @@ import java.util.Collections; import java.util.Map; public class AliasingContext { + @NotNull public static AliasingContext getCleanContext() { return new AliasingContext(null, null, null); } - @Nullable - private Map aliasesForDescriptors; + @NotNull + private final Map aliasesForDescriptors; - @Nullable + @NotNull private final Map aliasesForExpressions; @Nullable @@ -46,8 +47,8 @@ public class AliasingContext { @Nullable Map aliasesForExpressions ) { this.parent = parent; - this.aliasesForDescriptors = aliasesForDescriptors; - this.aliasesForExpressions = aliasesForExpressions; + this.aliasesForDescriptors = aliasesForDescriptors == null ? Collections.emptyMap() : aliasesForDescriptors; + this.aliasesForExpressions = aliasesForExpressions == null ? Collections.emptyMap() : aliasesForExpressions; } @NotNull @@ -70,47 +71,16 @@ public class AliasingContext { return new AliasingContext(this, aliases, null); } - @Nullable - final public JsExpression getAliasForDescriptor(@NotNull DeclarationDescriptor descriptor) { + public JsExpression getAliasForDescriptor(@NotNull DeclarationDescriptor descriptor) { // these aliases cannot be shared and applicable only in current context - return getAliasForDescriptor(descriptor, false); - } - - @Nullable - protected JsExpression getAliasForDescriptor(@NotNull DeclarationDescriptor descriptor, boolean fromChild) { - JsExpression alias = aliasesForDescriptors == null ? null : aliasesForDescriptors.get(descriptor.getOriginal()); - return alias != null || parent == null ? alias : parent.getAliasForDescriptor(descriptor, true); + JsExpression alias = aliasesForDescriptors.get(descriptor.getOriginal()); + return alias != null || parent == null ? alias : parent.getAliasForDescriptor(descriptor); } @Nullable public JsExpression getAliasForExpression(@NotNull KtExpression element) { - JsExpression alias = aliasesForExpressions == null ? null : aliasesForExpressions.get(element); + JsExpression alias = aliasesForExpressions.get(element); return alias != null || parent == null ? alias : parent.getAliasForExpression(element); } - - /** - * Usages: - * 1) Local variable captured in closure. If captured in closure, any modification in closure should affect captured variable. - * So, "var count = n" wrapped as "var count = {v: n}". descriptor wil be property descriptor, alias will be JsObjectLiteral - * - * 2) Local named function. - */ - public void registerAlias(@NotNull DeclarationDescriptor descriptor, @NotNull JsExpression alias) { - if (aliasesForDescriptors == null) { - aliasesForDescriptors = Collections.singletonMap(descriptor, alias); - } - else { - if (aliasesForDescriptors.size() == 1) { - Map singletonMap = aliasesForDescriptors; - aliasesForDescriptors = new THashMap(); - aliasesForDescriptors.put(singletonMap.keySet().iterator().next(), singletonMap.values().iterator().next()); - } - JsExpression prev = aliasesForDescriptors.put(descriptor, alias); - assert prev == null : "Alias for descriptor already registered." + - " Descriptor: " + descriptor + - " prev alias: " + prev + - " new alias: " + alias; - } - } }