migrating code
This commit is contained in:
Generated
+373
-1239
File diff suppressed because it is too large
Load Diff
@@ -1,4 +1,4 @@
|
||||
package js
|
||||
package js;
|
||||
|
||||
fun println()
|
||||
fun println(s : Any?)
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package jquery;
|
||||
|
||||
fun fail() : Nothing = throw RuntimeException();
|
||||
import js.annotations.*;
|
||||
|
||||
fun JQuery.toString() = ""
|
||||
|
||||
class JQuery() {
|
||||
fun addClass(className : String) : JQuery = fail();
|
||||
JavascriptNativeClass class JQuery() {
|
||||
fun addClass(className : String) : JQuery = this;
|
||||
fun attr(attrName : String) = ""
|
||||
fun attr(attrName : String, value : String) = this
|
||||
fun hasClass(className : String) = true
|
||||
@@ -28,9 +29,9 @@ open class DomElement() {
|
||||
|
||||
//val document = object : DomElement() {}
|
||||
|
||||
fun jq(selector : String) = JQuery();
|
||||
fun jq(selector : String, context : DomElement) = JQuery();
|
||||
fun jq(callback : () -> Unit) = JQuery();
|
||||
fun jq(obj : JQuery) = JQuery();
|
||||
fun jq(el : DomElement) = JQuery();
|
||||
fun jq() = JQuery();
|
||||
JavascriptNativeFunction("$") fun jq(selector : String) = JQuery();
|
||||
JavascriptNativeFunction("$") fun jq(selector : String, context : DomElement) = JQuery();
|
||||
JavascriptNativeFunction("$") fun jq(callback : () -> Unit) = JQuery();
|
||||
JavascriptNativeFunction("$") fun jq(obj : JQuery) = JQuery();
|
||||
JavascriptNativeFunction("$") fun jq(el : DomElement) = JQuery();
|
||||
JavascriptNativeFunction("$") fun jq() = JQuery();
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
package org.jetbrains.k2js;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
*/
|
||||
public interface Config {
|
||||
|
||||
@NotNull
|
||||
Project getProject();
|
||||
}
|
||||
+21
-32
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.k2js;
|
||||
package org.jetbrains.k2js.analyze;
|
||||
|
||||
import com.google.common.base.Predicate;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -12,10 +12,9 @@ import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetPsiFactory;
|
||||
import org.jetbrains.jet.lang.resolve.*;
|
||||
import org.jetbrains.jet.lang.resolve.scopes.WritableScope;
|
||||
import org.jetbrains.k2js.utils.JetFileUtils;
|
||||
import org.jetbrains.k2js.config.Config;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -23,43 +22,32 @@ import java.util.List;
|
||||
*/
|
||||
public final class Analyzer {
|
||||
|
||||
//TODO: provide some generic way to access
|
||||
private static final List<String> LIB_FILE_NAMES = Arrays.asList(
|
||||
"C:\\Dev\\Projects\\jet-contrib\\k2js\\jslib\\src\\jquery\\common.kt",
|
||||
"C:\\Dev\\Projects\\jet-contrib\\k2js\\jslib\\src\\core\\javautil.kt",
|
||||
"C:\\Dev\\Projects\\jet-contrib\\k2js\\jslib\\src\\core\\core.kt"
|
||||
);
|
||||
|
||||
@NotNull
|
||||
public static List<JetFile> getJsSupportStdLib(@Nullable Project project) {
|
||||
List<JetFile> libFiles = new ArrayList<JetFile>();
|
||||
for (String libFileName : LIB_FILE_NAMES) {
|
||||
libFiles.add(JetFileUtils.loadPsiFile(libFileName, project));
|
||||
}
|
||||
return libFiles;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static BindingContext analyzeFiles(@NotNull List<JetFile> files,
|
||||
@NotNull Project project) {
|
||||
final List<JetFile> jsLibFiles = getJsSupportStdLib(project);
|
||||
List<JetFile> allFiles = allFiles(files, jsLibFiles);
|
||||
return AnalyzingUtils.analyzeFiles(project, JsConfiguration.jsLibConfiguration(project),
|
||||
public static BindingContext analyzeFilesAndCheckErrors(@NotNull List<JetFile> files,
|
||||
@NotNull Config config) {
|
||||
final List<JetFile> jsLibFiles = config.getLibFiles();
|
||||
List<JetFile> allFiles = withJsLibAdded(files, config);
|
||||
BindingContext bindingContext = AnalyzingUtils.analyzeFiles(config.getProject(),
|
||||
JsConfiguration.jsLibConfiguration(config.getProject()),
|
||||
allFiles, notLibFiles(jsLibFiles), JetControlFlowDataTraceFactory.EMPTY);
|
||||
checkForErrors(allFiles, bindingContext);
|
||||
return bindingContext;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static Project getProject(@NotNull List<JetFile> files) {
|
||||
assert !files.isEmpty();
|
||||
return files.iterator().next().getProject();
|
||||
private static void checkForErrors(@NotNull List<JetFile> allFiles, @NotNull BindingContext bindingContext) {
|
||||
for (JetFile file : allFiles) {
|
||||
AnalyzingUtils.checkForSyntacticErrors(file);
|
||||
AnalyzingUtils.throwExceptionOnErrors(bindingContext);
|
||||
}
|
||||
}
|
||||
|
||||
//TODO: use some mechanism to avoid this
|
||||
//TODO: move method somewhere
|
||||
@NotNull
|
||||
private static List<JetFile> allFiles(@NotNull List<JetFile> files,
|
||||
@NotNull List<JetFile> jsLibFiles) {
|
||||
public static List<JetFile> withJsLibAdded(@NotNull List<JetFile> files, @NotNull Config config) {
|
||||
List<JetFile> allFiles = new ArrayList<JetFile>();
|
||||
allFiles.addAll(files);
|
||||
allFiles.addAll(jsLibFiles);
|
||||
allFiles.addAll(config.getLibFiles());
|
||||
return allFiles;
|
||||
}
|
||||
|
||||
@@ -69,7 +57,8 @@ public final class Analyzer {
|
||||
@Override
|
||||
public boolean apply(@Nullable PsiFile file) {
|
||||
assert file instanceof JetFile;
|
||||
return (!jsLibFiles.contains(file));
|
||||
boolean notLibFile = !jsLibFiles.contains(file);
|
||||
return notLibFile;
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package org.jetbrains.k2js.config;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.k2js.utils.JetFileUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
*/
|
||||
public abstract class Config {
|
||||
|
||||
//TODO: provide some generic way to access
|
||||
private static final List<String> LIB_FILE_NAMES = Arrays.asList(
|
||||
"C:\\Dev\\Projects\\jet-contrib\\k2js\\jslib\\src\\core\\annotations.kt",
|
||||
"C:\\Dev\\Projects\\jet-contrib\\k2js\\jslib\\src\\jquery\\common.kt",
|
||||
"C:\\Dev\\Projects\\jet-contrib\\k2js\\jslib\\src\\core\\javautil.kt",
|
||||
"C:\\Dev\\Projects\\jet-contrib\\k2js\\jslib\\src\\core\\core.kt"
|
||||
);
|
||||
|
||||
@NotNull
|
||||
private static List<JetFile> initLibFiles(@NotNull Project project) {
|
||||
List<JetFile> libFiles = new ArrayList<JetFile>();
|
||||
for (String libFileName : LIB_FILE_NAMES) {
|
||||
libFiles.add(JetFileUtils.loadPsiFile(libFileName, project));
|
||||
}
|
||||
return libFiles;
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
private /*var*/ List<JetFile> jsLibFiles = null;
|
||||
|
||||
@NotNull
|
||||
public abstract Project getProject();
|
||||
|
||||
@NotNull
|
||||
public List<JetFile> getLibFiles() {
|
||||
if (jsLibFiles == null) {
|
||||
jsLibFiles = initLibFiles(getProject());
|
||||
}
|
||||
|
||||
return jsLibFiles;
|
||||
}
|
||||
}
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.k2js;
|
||||
package org.jetbrains.k2js.config;
|
||||
|
||||
import com.intellij.openapi.project.Project;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -6,7 +6,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
*/
|
||||
public final class IDEAConfig implements Config {
|
||||
public final class IDEAConfig extends Config {
|
||||
|
||||
@NotNull
|
||||
private final Project project;
|
||||
+2
-2
@@ -1,4 +1,4 @@
|
||||
package org.jetbrains.k2js;
|
||||
package org.jetbrains.k2js.config;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -9,7 +9,7 @@ import org.jetbrains.jet.compiler.JetCoreEnvironment;
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
*/
|
||||
public final class TestConfig implements Config {
|
||||
public final class TestConfig extends Config {
|
||||
|
||||
@NotNull
|
||||
private static JetCoreEnvironment getTestEnvironment() {
|
||||
+15
-12
@@ -1,14 +1,19 @@
|
||||
package org.jetbrains.k2js;
|
||||
package org.jetbrains.k2js.facade;
|
||||
|
||||
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.JetFile;
|
||||
import org.jetbrains.jet.lang.psi.JetNamespaceHeader;
|
||||
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.k2js.analyze.Analyzer;
|
||||
import org.jetbrains.k2js.config.Config;
|
||||
import org.jetbrains.k2js.config.IDEAConfig;
|
||||
import org.jetbrains.k2js.config.TestConfig;
|
||||
import org.jetbrains.k2js.generate.CodeGenerator;
|
||||
import org.jetbrains.k2js.translate.general.Translation;
|
||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||
import org.jetbrains.k2js.utils.GenerationUtils;
|
||||
import org.jetbrains.k2js.utils.JetFileUtils;
|
||||
|
||||
@@ -88,17 +93,15 @@ public final class K2JSTranslator {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private JsProgram generateProgram(@NotNull List<JetFile> files) {
|
||||
BindingContext bindingContext = Analyzer.analyzeFiles(files, config.getProject());
|
||||
for (JetFile file : files) {
|
||||
AnalyzingUtils.checkForSyntacticErrors(file);
|
||||
AnalyzingUtils.throwExceptionOnErrors(bindingContext);
|
||||
}
|
||||
|
||||
JetFile file = files.iterator().next();
|
||||
return Translation.generateAst(bindingContext, file, file.getProject());
|
||||
private JsProgram generateProgram(@NotNull List<JetFile> filesToTranslate) {
|
||||
BindingContext bindingContext = Analyzer.analyzeFilesAndCheckErrors(filesToTranslate, config);
|
||||
JetFile file = filesToTranslate.iterator().next();
|
||||
NamespaceDescriptor namespaceDescriptor = BindingUtils.getNamespaceDescriptor(bindingContext, file);
|
||||
return Translation.generateAst(bindingContext, namespaceDescriptor,
|
||||
Analyzer.withJsLibAdded(filesToTranslate, config), getProject());
|
||||
}
|
||||
|
||||
|
||||
@NotNull
|
||||
public String generateCallToMain(@NotNull JetFile file, @NotNull String argumentString) {
|
||||
String namespaceName = getRootNamespaceName(file);
|
||||
@@ -122,7 +125,7 @@ public final class K2JSTranslator {
|
||||
JetNamespaceHeader namespaceHeader = psiFile.getNamespaceHeader();
|
||||
String name = namespaceHeader.getName();
|
||||
assert name != null : "NamespaceHeader must have a name";
|
||||
//TODO: ensapsulate anonymous logic somewhere
|
||||
//TODO: encapsulate anonymous logic somewhere
|
||||
if (name.equals("")) {
|
||||
return "Anonymous";
|
||||
}
|
||||
+2
-1
@@ -1,7 +1,8 @@
|
||||
package org.jetbrains.k2js;
|
||||
package org.jetbrains.k2js.facade;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.k2js.config.TestConfig;
|
||||
import org.jetbrains.k2js.utils.ErrorSender;
|
||||
|
||||
import java.applet.Applet;
|
||||
@@ -132,9 +132,13 @@ public final class DeclarationVisitor extends DeclarationDescriptorVisitor<Void,
|
||||
|
||||
@Override
|
||||
public Void visitNamespaceDescriptor(@NotNull NamespaceDescriptor descriptor, @NotNull DeclarationContext context) {
|
||||
/* do not traverse inner namespaces */
|
||||
return null;
|
||||
}
|
||||
|
||||
public void traverseNamespace(NamespaceDescriptor descriptor, DeclarationContext context) {
|
||||
DeclarationContext namespaceContext = extractNamespaceDeclaration(descriptor, context);
|
||||
declareMembers(descriptor, namespaceContext);
|
||||
return null;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -1,14 +1,21 @@
|
||||
package org.jetbrains.k2js.translate.context;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
import com.google.dart.compiler.backend.js.ast.JsName;
|
||||
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.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.JetFile;
|
||||
import org.jetbrains.jet.lang.resolve.BindingContext;
|
||||
import org.jetbrains.jet.lang.types.JetStandardLibrary;
|
||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
@@ -33,9 +40,19 @@ public final class Declarations {
|
||||
this.rootScope = scope;
|
||||
}
|
||||
|
||||
public void extractDeclarations(@NotNull DeclarationDescriptor descriptor) {
|
||||
public void extractDeclarationsFromNamespace(@NotNull NamespaceDescriptor descriptor) {
|
||||
DeclarationVisitor visitor = new DeclarationVisitor(this, true);
|
||||
descriptor.accept(visitor, DeclarationContext.rootContext(rootScope, null));
|
||||
visitor.traverseNamespace(descriptor, DeclarationContext.rootContext(rootScope, null));
|
||||
}
|
||||
|
||||
public void extractDeclarationsFromFiles(@NotNull List<JetFile> files, @NotNull BindingContext context) {
|
||||
Set<NamespaceDescriptor> namespaces = Sets.newHashSet();
|
||||
for (JetFile file : files) {
|
||||
namespaces.add(BindingUtils.getNamespaceDescriptor(context, file));
|
||||
}
|
||||
for (NamespaceDescriptor namespace : namespaces) {
|
||||
extractDeclarationsFromNamespace(namespace);
|
||||
}
|
||||
}
|
||||
|
||||
public void extractStandardLibrary(@NotNull JetStandardLibrary standardLibrary,
|
||||
@@ -78,17 +95,20 @@ public final class Declarations {
|
||||
}
|
||||
|
||||
/*package*/ void putScope(@NotNull DeclarationDescriptor descriptor, @NotNull NamingScope scope) {
|
||||
assert !descriptorToScopeMap.containsKey(descriptor) : "Already contains that key!";
|
||||
assert !descriptorToScopeMap.containsKey(descriptor)
|
||||
: "Already contains that key!\n" + descriptor;
|
||||
descriptorToScopeMap.put(descriptor, scope);
|
||||
}
|
||||
|
||||
/*package*/ void putName(@NotNull DeclarationDescriptor descriptor, @NotNull JsName name) {
|
||||
assert !descriptorToNameMap.containsKey(descriptor) : "Already contains that key!";
|
||||
assert !descriptorToNameMap.containsKey(descriptor)
|
||||
: "Already contains that key!\n" + descriptor;
|
||||
descriptorToNameMap.put(descriptor, name);
|
||||
}
|
||||
|
||||
/*package*/ void putQualifier(@NotNull DeclarationDescriptor descriptor, @Nullable JsNameRef qualifier) {
|
||||
assert !descriptorToQualifierMap.containsKey(descriptor) : "Already contains that key!";
|
||||
assert !descriptorToQualifierMap.containsKey(descriptor)
|
||||
: "Already contains that key!";
|
||||
descriptorToQualifierMap.put(descriptor, qualifier);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -20,7 +20,8 @@ import org.jetbrains.k2js.translate.expression.PatternTranslator;
|
||||
import org.jetbrains.k2js.translate.expression.WhenTranslator;
|
||||
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
|
||||
import org.jetbrains.k2js.translate.initializer.NamespaceInitializerTranslator;
|
||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Pavel Talanov
|
||||
@@ -90,17 +91,18 @@ public final class Translation {
|
||||
}
|
||||
|
||||
public static JsProgram generateAst(@NotNull BindingContext bindingContext,
|
||||
@NotNull JetFile namespace, @NotNull Project project) {
|
||||
@NotNull NamespaceDescriptor namespaceToTranslate,
|
||||
@NotNull List<JetFile> files,
|
||||
@NotNull Project project) {
|
||||
//TODO: move some of the code somewhere
|
||||
JetStandardLibrary standardLibrary = JetStandardLibrary.getJetStandardLibrary(project);
|
||||
NamespaceDescriptor descriptor = BindingUtils.getNamespaceDescriptor(bindingContext, namespace);
|
||||
StaticContext staticContext = StaticContext.generateStaticContext(standardLibrary, bindingContext);
|
||||
staticContext.getDeclarations().
|
||||
extractStandardLibrary(standardLibrary, staticContext.getNamer().kotlinObject());
|
||||
staticContext.getDeclarations().extractDeclarations(descriptor);
|
||||
staticContext.getDeclarations().extractDeclarationsFromFiles(files, bindingContext);
|
||||
JsBlock block = staticContext.getProgram().getFragmentBlock(0);
|
||||
TranslationContext context = TranslationContext.rootContext(staticContext);
|
||||
block.addStatement(Translation.translateNamespace(descriptor, context));
|
||||
block.addStatement(Translation.translateNamespace(namespaceToTranslate, context));
|
||||
|
||||
JsNamer namer = new JsPrettyNamer();
|
||||
namer.exec(context.program());
|
||||
|
||||
@@ -49,7 +49,10 @@ public final class BindingUtils {
|
||||
@NotNull
|
||||
public static NamespaceDescriptor getNamespaceDescriptor(@NotNull BindingContext context,
|
||||
@NotNull JetFile declaration) {
|
||||
return getDescriptorForExpression(context, declaration, NamespaceDescriptor.class);
|
||||
NamespaceDescriptor namespaceDescriptor =
|
||||
context.get(BindingContext.FQNAME_TO_NAMESPACE_DESCRIPTOR, JetPsiUtil.getFQName(declaration));
|
||||
assert namespaceDescriptor != null : "File should have a namespace descriptor.";
|
||||
return namespaceDescriptor;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package org.jetbrains.k2js.utils;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.k2js.K2JSTranslatorApplet;
|
||||
import org.jetbrains.k2js.facade.K2JSTranslatorApplet;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.jetbrains.k2js.test;
|
||||
|
||||
import org.jetbrains.k2js.K2JSTranslatorApplet;
|
||||
import org.jetbrains.k2js.facade.K2JSTranslatorApplet;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
import org.mozilla.javascript.Context;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package org.jetbrains.k2js.test;
|
||||
|
||||
import org.jetbrains.k2js.K2JSTranslator;
|
||||
import org.jetbrains.k2js.facade.K2JSTranslator;
|
||||
import org.mozilla.javascript.Context;
|
||||
import org.mozilla.javascript.Scriptable;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user