Include standard library.
This commit is contained in:
@@ -73,7 +73,7 @@ public class K2JSTranslator {
|
||||
}
|
||||
|
||||
Project project = environment.getProject();
|
||||
GenerationState generationState = new GenerationState();
|
||||
GenerationState generationState = new GenerationState(project);
|
||||
List<JetNamespace> namespaces = Lists.newArrayList();
|
||||
if (vFile.isDirectory()) {
|
||||
File dir = new File(vFile.getPath());
|
||||
|
||||
@@ -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<DeclarationDescriptor, JsName> aliases = new HashMap<DeclarationDescriptor, JsName>();
|
||||
@Nullable
|
||||
|
||||
@@ -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<JetNamespace> namespaces) {
|
||||
public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext,
|
||||
@NotNull List<JetNamespace> 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);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"));
|
||||
|
||||
Reference in New Issue
Block a user