Refactor constructors in TranslationContext.java.

Adapted from https://github.com/develar/kotlin/commit/a9e0a42fb1347fa8e21c86b5a073ef8a7c873da0.
This commit is contained in:
Pavel V. Talanov
2012-08-10 20:54:17 +04:00
parent ec905d3892
commit 751cf0233a
@@ -58,16 +58,18 @@ public class TranslationContext {
return staticContext.isEcma5(); return staticContext.isEcma5();
} }
public boolean isNotEcma3() {
return staticContext.getEcmaVersion() != EcmaVersion.v3;
}
private TranslationContext(@NotNull StaticContext staticContext, private TranslationContext(@NotNull StaticContext staticContext,
@NotNull DynamicContext dynamicContext, @NotNull DynamicContext dynamicContext,
@NotNull AliasingContext context) { @NotNull AliasingContext aliasingContext) {
this.dynamicContext = dynamicContext; this.dynamicContext = dynamicContext;
this.staticContext = staticContext; 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() { public DynamicContext dynamicContext() {
@@ -75,10 +77,25 @@ public class TranslationContext {
} }
@NotNull @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); 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 @NotNull
public TranslationContext innerBlock(@NotNull JsBlock block) { public TranslationContext innerBlock(@NotNull JsBlock block) {
return new TranslationContext(staticContext, dynamicContext.innerBlock(block), aliasingContext); return new TranslationContext(staticContext, dynamicContext.innerBlock(block), aliasingContext);
@@ -89,25 +106,19 @@ public class TranslationContext {
return contextWithScope(getScopeForDescriptor(descriptor), getBlockForDescriptor(descriptor)); 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 @NotNull
public TranslationContext innerContextWithThisAliased(@NotNull DeclarationDescriptor correspondingDescriptor, @NotNull JsName alias) { 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 @NotNull
public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map<JetExpression, JsName> aliases) { public TranslationContext innerContextWithAliasesForExpressions(@NotNull Map<JetExpression, JsName> aliases) {
return new TranslationContext(staticContext, dynamicContext, aliasingContext.withAliasesForExpressions(aliases)); return new TranslationContext(this, aliasingContext.withAliasesForExpressions(aliases));
} }
@NotNull @NotNull
public TranslationContext innerContextWithDescriptorsAliased(@NotNull Map<DeclarationDescriptor, JsName> aliases) { public TranslationContext innerContextWithDescriptorsAliased(@NotNull Map<DeclarationDescriptor, JsName> aliases) {
return new TranslationContext(staticContext, dynamicContext, aliasingContext.withDescriptorsAliased(aliases)); return new TranslationContext(this, aliasingContext.withDescriptorsAliased(aliases));
} }
@NotNull @NotNull