Include standard library.
This commit is contained in:
@@ -73,7 +73,7 @@ public class K2JSTranslator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Project project = environment.getProject();
|
Project project = environment.getProject();
|
||||||
GenerationState generationState = new GenerationState();
|
GenerationState generationState = new GenerationState(project);
|
||||||
List<JetNamespace> namespaces = Lists.newArrayList();
|
List<JetNamespace> namespaces = Lists.newArrayList();
|
||||||
if (vFile.isDirectory()) {
|
if (vFile.isDirectory()) {
|
||||||
File dir = new File(vFile.getPath());
|
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.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
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.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class Aliaser {
|
public class Aliaser {
|
||||||
|
|
||||||
static public Aliaser aliasesForStandardClasses() {
|
static public Aliaser aliasesForStandardClasses(@NotNull JetStandardLibrary standardLibrary,
|
||||||
|
@NotNull Namer namer) {
|
||||||
Aliaser result = new Aliaser();
|
Aliaser result = new Aliaser();
|
||||||
//result.setAliasForDescriptor();
|
result.setAliasForDescriptor(standardLibrary.getArray(), namer.declareStandardClass("Array"));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
private final Map<DeclarationDescriptor, JsName> aliases = new HashMap<DeclarationDescriptor, JsName>();
|
private final Map<DeclarationDescriptor, JsName> aliases = new HashMap<DeclarationDescriptor, JsName>();
|
||||||
@Nullable
|
@Nullable
|
||||||
|
|||||||
@@ -4,31 +4,30 @@
|
|||||||
package org.jetbrains.k2js.translate.general;
|
package org.jetbrains.k2js.translate.general;
|
||||||
|
|
||||||
import com.google.dart.compiler.backend.js.ast.JsProgram;
|
import com.google.dart.compiler.backend.js.ast.JsProgram;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.JetNamespace;
|
import org.jetbrains.jet.lang.psi.JetNamespace;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.k2js.declarations.Declarations;
|
|
||||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class GenerationState {
|
public final class GenerationState {
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
private final Project project;
|
||||||
|
|
||||||
public GenerationState() {
|
public GenerationState(@NotNull Project project) {
|
||||||
|
this.project = project;
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext, @NotNull List<JetNamespace> namespaces) {
|
public JsProgram compileCorrectNamespaces(@NotNull BindingContext bindingContext,
|
||||||
|
@NotNull List<JetNamespace> namespaces) {
|
||||||
//TODO hardcoded
|
//TODO hardcoded
|
||||||
JsProgram result = new JsProgram("main");
|
|
||||||
JetNamespace namespace = namespaces.get(0);
|
JetNamespace namespace = namespaces.get(0);
|
||||||
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
|
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
|
||||||
Declarations declarations = Declarations.extractDeclarations(descriptor, result.getRootScope());
|
return Translation.generateAst(bindingContext, namespace, project);
|
||||||
Translation.generateAst(result, bindingContext, declarations, namespace);
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,9 @@ package org.jetbrains.k2js.translate.general;
|
|||||||
|
|
||||||
import com.google.dart.compiler.backend.js.ast.*;
|
import com.google.dart.compiler.backend.js.ast.*;
|
||||||
import com.google.dart.compiler.util.AstUtil;
|
import com.google.dart.compiler.util.AstUtil;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
import org.jetbrains.k2js.declarations.Declarations;
|
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.initializer.NamespaceInitializerTranslator;
|
||||||
import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator;
|
import org.jetbrains.k2js.translate.reference.PropertyAccessTranslator;
|
||||||
import org.jetbrains.k2js.translate.reference.ReferenceTranslator;
|
import org.jetbrains.k2js.translate.reference.ReferenceTranslator;
|
||||||
|
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Talanov Pavel
|
* @author Talanov Pavel
|
||||||
@@ -90,11 +93,16 @@ public final class Translation {
|
|||||||
return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod();
|
return (new NamespaceInitializerTranslator(namespace, context)).generateInitializeMethod();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void generateAst(@NotNull JsProgram result, @NotNull BindingContext bindingContext,
|
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
|
||||||
@NotNull Declarations declarations, @NotNull JetNamespace namespace) {
|
@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);
|
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));
|
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.JsProgram;
|
||||||
import com.google.dart.compiler.backend.js.ast.JsScope;
|
import com.google.dart.compiler.backend.js.ast.JsScope;
|
||||||
import com.google.dart.compiler.util.AstUtil;
|
import com.google.dart.compiler.util.AstUtil;
|
||||||
|
import com.intellij.openapi.project.Project;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
import org.jetbrains.jet.lang.psi.*;
|
import org.jetbrains.jet.lang.psi.*;
|
||||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||||
|
import org.jetbrains.jet.lang.types.JetStandardLibrary;
|
||||||
import org.jetbrains.k2js.declarations.Declarations;
|
import org.jetbrains.k2js.declarations.Declarations;
|
||||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||||
import org.jetbrains.k2js.translate.utils.Namer;
|
import org.jetbrains.k2js.translate.utils.Namer;
|
||||||
@@ -37,11 +39,14 @@ public final class TranslationContext {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static TranslationContext rootContext(@NotNull JsProgram program, @NotNull BindingContext bindingContext,
|
public static TranslationContext rootContext(@NotNull JsProgram program, @NotNull BindingContext bindingContext,
|
||||||
@NotNull Declarations extractor) {
|
@NotNull Declarations extractor, @NotNull Project project) {
|
||||||
JsScope rootScope = program.getRootScope();
|
JsScope rootScope = program.getRootScope();
|
||||||
Scopes scopes = new Scopes(rootScope, rootScope, rootScope);
|
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,
|
return new TranslationContext(null, program, bindingContext,
|
||||||
scopes, extractor, Aliaser.aliasesForStandardClasses(), Namer.newInstance(rootScope));
|
scopes, extractor, aliaser, namer);
|
||||||
}
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
|
|||||||
@@ -120,6 +120,11 @@ public final class Namer {
|
|||||||
return reference;
|
return reference;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@NotNull
|
||||||
|
public JsName declareStandardClass(@NotNull String name) {
|
||||||
|
return kotlinScope.declareName(name);
|
||||||
|
}
|
||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsNameRef isOperationReference() {
|
public JsNameRef isOperationReference() {
|
||||||
return kotlin(AstUtil.newQualifiedNameRef("isType"));
|
return kotlin(AstUtil.newQualifiedNameRef("isType"));
|
||||||
|
|||||||
Reference in New Issue
Block a user