From 5ed130b7450b6c04f51a10ed6cb337f2a36a3d85 Mon Sep 17 00:00:00 2001 From: Pavel Talanov Date: Mon, 28 Nov 2011 19:36:22 +0400 Subject: [PATCH] Include standard library. --- .../src/org/jetbrains/k2js/K2JSTranslator.java | 2 +- .../k2js/translate/general/Aliaser.java | 8 +++++--- .../k2js/translate/general/GenerationState.java | 17 ++++++++--------- .../k2js/translate/general/Translation.java | 14 +++++++++++--- .../translate/general/TranslationContext.java | 9 +++++++-- .../jetbrains/k2js/translate/utils/Namer.java | 5 +++++ 6 files changed, 37 insertions(+), 18 deletions(-) diff --git a/translator/src/org/jetbrains/k2js/K2JSTranslator.java b/translator/src/org/jetbrains/k2js/K2JSTranslator.java index dd7e5ea0404..4d8e326a454 100644 --- a/translator/src/org/jetbrains/k2js/K2JSTranslator.java +++ b/translator/src/org/jetbrains/k2js/K2JSTranslator.java @@ -73,7 +73,7 @@ public class K2JSTranslator { } Project project = environment.getProject(); - GenerationState generationState = new GenerationState(); + GenerationState generationState = new GenerationState(project); List namespaces = Lists.newArrayList(); if (vFile.isDirectory()) { File dir = new File(vFile.getPath()); diff --git a/translator/src/org/jetbrains/k2js/translate/general/Aliaser.java b/translator/src/org/jetbrains/k2js/translate/general/Aliaser.java index 6abe2f143f2..f7f847c140b 100644 --- a/translator/src/org/jetbrains/k2js/translate/general/Aliaser.java +++ b/translator/src/org/jetbrains/k2js/translate/general/Aliaser.java @@ -5,19 +5,21 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; +import org.jetbrains.jet.lang.types.JetStandardLibrary; +import org.jetbrains.k2js.translate.utils.Namer; import java.util.HashMap; import java.util.Map; public class Aliaser { - static public Aliaser aliasesForStandardClasses() { + static public Aliaser aliasesForStandardClasses(@NotNull JetStandardLibrary standardLibrary, + @NotNull Namer namer) { Aliaser result = new Aliaser(); - //result.setAliasForDescriptor(); + result.setAliasForDescriptor(standardLibrary.getArray(), namer.declareStandardClass("Array")); return result; } - @NotNull private final Map aliases = new HashMap(); @Nullable diff --git a/translator/src/org/jetbrains/k2js/translate/general/GenerationState.java b/translator/src/org/jetbrains/k2js/translate/general/GenerationState.java index e2a1d6f49ce..8d0b90d216b 100644 --- a/translator/src/org/jetbrains/k2js/translate/general/GenerationState.java +++ b/translator/src/org/jetbrains/k2js/translate/general/GenerationState.java @@ -4,31 +4,30 @@ package org.jetbrains.k2js.translate.general; import com.google.dart.compiler.backend.js.ast.JsProgram; +import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.JetNamespace; import org.jetbrains.jet.lang.resolve.BindingContext; -import org.jetbrains.k2js.declarations.Declarations; import org.jetbrains.k2js.translate.utils.BindingUtils; import java.util.List; public final class GenerationState { + @NotNull + private final Project project; - public GenerationState() { + public GenerationState(@NotNull Project project) { + this.project = project; } @NotNull - public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext, @NotNull List namespaces) { + public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext, + @NotNull List namespaces) { //TODO hardcoded - JsProgram result = new JsProgram("main"); JetNamespace namespace = namespaces.get(0); NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace); - Declarations declarations = Declarations.extractDeclarations(descriptor, result.getRootScope()); - Translation.generateAst(result, bindingContext, declarations, namespace); - return result; + return Translation.generateAst(bindingContext, namespace, project); } - - } diff --git a/translator/src/org/jetbrains/k2js/translate/general/Translation.java b/translator/src/org/jetbrains/k2js/translate/general/Translation.java index 71215e2aec8..c9b36f82d3b 100644 --- a/translator/src/org/jetbrains/k2js/translate/general/Translation.java +++ b/translator/src/org/jetbrains/k2js/translate/general/Translation.java @@ -2,7 +2,9 @@ package org.jetbrains.k2js.translate.general; import com.google.dart.compiler.backend.js.ast.*; import com.google.dart.compiler.util.AstUtil; +import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.k2js.declarations.Declarations; @@ -16,6 +18,7 @@ import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator; import org.jetbrains.k2js.translate.initializer.NamespaceInitializerTranslator; import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator; import org.jetbrains.k2js.translate.reference.ReferenceTranslator; +import org.jetbrains.k2js.translate.utils.BindingUtils; /** * @author Talanov Pavel @@ -90,11 +93,16 @@ public final class Translation { return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod(); } - public static void generateAst(@NotNull JsProgram result, @NotNull BindingContext bindingContext, - @NotNull Declarations declarations, @NotNull JetNamespace namespace) { + public static JsProgram generateAst(@NotNull BindingContext bindingContext, + @NotNull JetNamespace namespace, @NotNull Project project) { + //TODO hardcoded + JsProgram result = new JsProgram("main"); + NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace); + Declarations declarations = Declarations.extractDeclarations(descriptor, result.getRootScope()); JsBlock block = result.getFragmentBlock(0); - TranslationContext context = TranslationContext.rootContext(result, bindingContext, declarations); + TranslationContext context = TranslationContext.rootContext(result, bindingContext, declarations, project); block.addStatement(Translation.translateNamespace(namespace, context)); + return result; } diff --git a/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java b/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java index 61093fb6213..7364219dc39 100644 --- a/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java +++ b/translator/src/org/jetbrains/k2js/translate/general/TranslationContext.java @@ -5,11 +5,13 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef; import com.google.dart.compiler.backend.js.ast.JsProgram; import com.google.dart.compiler.backend.js.ast.JsScope; import com.google.dart.compiler.util.AstUtil; +import com.intellij.openapi.project.Project; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.BindingContext; +import org.jetbrains.jet.lang.types.JetStandardLibrary; import org.jetbrains.k2js.declarations.Declarations; import org.jetbrains.k2js.translate.utils.BindingUtils; import org.jetbrains.k2js.translate.utils.Namer; @@ -37,11 +39,14 @@ public final class TranslationContext { @NotNull public static TranslationContext rootContext(@NotNull JsProgram program, @NotNull BindingContext bindingContext, - @NotNull Declarations extractor) { + @NotNull Declarations extractor, @NotNull Project project) { JsScope rootScope = program.getRootScope(); Scopes scopes = new Scopes(rootScope, rootScope, rootScope); + Namer namer = Namer.newInstance(rootScope); + Aliaser aliaser = Aliaser.aliasesForStandardClasses + (JetStandardLibrary.getJetStandardLibrary(project), namer); return new TranslationContext(null, program, bindingContext, - scopes, extractor, Aliaser.aliasesForStandardClasses(), Namer.newInstance(rootScope)); + scopes, extractor, aliaser, namer); } @NotNull diff --git a/translator/src/org/jetbrains/k2js/translate/utils/Namer.java b/translator/src/org/jetbrains/k2js/translate/utils/Namer.java index 903f1c78617..da8a6eeebef 100644 --- a/translator/src/org/jetbrains/k2js/translate/utils/Namer.java +++ b/translator/src/org/jetbrains/k2js/translate/utils/Namer.java @@ -120,6 +120,11 @@ public final class Namer { return reference; } + @NotNull + public JsName declareStandardClass(@NotNull String name) { + return kotlinScope.declareName(name); + } + @NotNull public JsNameRef isOperationReference() { return kotlin(AstUtil.newQualifiedNameRef("isType"));