From 751cf0233a415371eb59b76accd68c0cf9c431dd Mon Sep 17 00:00:00 2001 From: "Pavel V. Talanov" Date: Fri, 10 Aug 2012 20:54:17 +0400 Subject: [PATCH] Refactor constructors in TranslationContext.java. Adapted from https://github.com/develar/kotlin/commit/a9e0a42fb1347fa8e21c86b5a073ef8a7c873da0. --- .../translate/context/TranslationContext.java | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index 864d556373c..9a197d46195 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -58,16 +58,18 @@ public class TranslationContext { return staticContext.isEcma5(); } - public boolean isNotEcma3() { - return staticContext.getEcmaVersion() != EcmaVersion.v3; - } - private TranslationContext(@NotNull StaticContext staticContext, - @NotNull DynamicContext dynamicContext, - @NotNull AliasingContext context) { + @NotNull DynamicContext dynamicContext, + @NotNull AliasingContext aliasingContext) { this.dynamicContext = dynamicContext; this.staticContext = staticContext; - aliasingContext = context; + this.aliasingContext = aliasingContext; + } + + private TranslationContext(@NotNull TranslationContext parent, @NotNull AliasingContext aliasingContext) { + dynamicContext = parent.dynamicContext; + staticContext = parent.staticContext; + this.aliasingContext = aliasingContext; } public DynamicContext dynamicContext() { @@ -75,10 +77,25 @@ public class TranslationContext { } @NotNull - public TranslationContext contextWithScope(@NotNull JsScope newScope, @NotNull JsBlock block) { + private TranslationContext contextWithScope(@NotNull JsScope newScope, @NotNull JsBlock block) { + return contextWithScope(newScope, block, aliasingContext); + } + + @NotNull + public TranslationContext contextWithScope(@NotNull JsFunction fun) { + return contextWithScope(fun, aliasingContext); + } + + @NotNull + protected TranslationContext contextWithScope(@NotNull JsScope newScope, @NotNull JsBlock block, @NotNull AliasingContext aliasingContext) { return new TranslationContext(staticContext, DynamicContext.newContext(newScope, block), aliasingContext); } + @NotNull + public TranslationContext contextWithScope(@NotNull JsFunction fun, @NotNull AliasingContext aliasingContext) { + return contextWithScope(fun.getScope(), fun.getBody(), aliasingContext); + } + @NotNull public TranslationContext innerBlock(@NotNull JsBlock block) { return new TranslationContext(staticContext, dynamicContext.innerBlock(block), aliasingContext); @@ -89,25 +106,19 @@ public class TranslationContext { return contextWithScope(getScopeForDescriptor(descriptor), getBlockForDescriptor(descriptor)); } - //TODO: consider passing a function here - @NotNull - public TranslationContext innerContextWithGivenScopeAndBlock(@NotNull JsScope scope, @NotNull JsBlock block) { - return contextWithScope(scope, block); - } - @NotNull public TranslationContext innerContextWithThisAliased(@NotNull DeclarationDescriptor correspondingDescriptor, @NotNull JsName alias) { - return new TranslationContext(staticContext, dynamicContext, aliasingContext.withThisAliased(correspondingDescriptor, alias)); + return new TranslationContext(this, aliasingContext.inner(correspondingDescriptor, alias)); } @NotNull public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map aliases) { - return new TranslationContext(staticContext, dynamicContext, aliasingContext.withAliasesForExpressions(aliases)); + return new TranslationContext(this, aliasingContext.withAliasesForExpressions(aliases)); } @NotNull public TranslationContext innerContextWithDescriptorsAliased(@NotNull Map aliases) { - return new TranslationContext(staticContext, dynamicContext, aliasingContext.withDescriptorsAliased(aliases)); + return new TranslationContext(this, aliasingContext.withDescriptorsAliased(aliases)); } @NotNull