diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index 64f96021da8..f393e9fffb8 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -10,13 +10,22 @@
-
+
+
+
-
+
+
+
+
+
+
+
+
@@ -36,10 +45,10 @@
org.jetbrains.k2js.translate.*
-
+
org.jetbrains.k2js.*
-
+
org.jetbrains.k2js.*
@@ -217,19 +226,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -278,8 +274,8 @@
-
+
@@ -287,7 +283,7 @@
-
+
@@ -299,10 +295,10 @@
-
+
-
+
@@ -311,19 +307,17 @@
-
+
-
+
-
-
-
-
+
+
@@ -386,57 +380,88 @@
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
+
@@ -451,33 +476,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -503,22 +501,22 @@
@@ -733,6 +731,16 @@
+
+
+
+
+
+
+
+
+
+
@@ -840,6 +848,10 @@
+
+
+
+
@@ -865,62 +877,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -942,9 +898,9 @@
-
-
+
+
@@ -1168,17 +1124,6 @@
-
-
-
-
-
-
-
-
-
-
-
@@ -1205,6 +1150,17 @@
+
+
+
+
+
+
+
+
+
+
+
@@ -1382,7 +1338,7 @@
-
+
@@ -1430,7 +1386,7 @@
-
+
@@ -1443,7 +1399,6 @@
-
@@ -1468,6 +1423,7 @@
+
@@ -1477,94 +1433,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
@@ -1572,7 +1440,7 @@
-
+
@@ -1586,15 +1454,103 @@
-
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/jslib/src/core/javautil.kt b/jslib/src/core/javautil.kt
index 98b36fe0cec..f9987cf76a6 100644
--- a/jslib/src/core/javautil.kt
+++ b/jslib/src/core/javautil.kt
@@ -58,13 +58,16 @@ public trait List : Collection {
open public fun get(index : Int) : E
open public fun set(index : Int, element : E) : E
open public fun add(index : Int, element : E) : Unit
+ js_name("remove_foo")
open public fun remove(index : Int) : E?
open public fun indexOf(o : Any?) : Int
open public fun lastIndexOf(o : Any?) : Int
open public fun subList(fromIndex : Int, toIndex : Int) : List?
+ js_name("remove_foo")
override public fun remove(o : Any?) : Boolean
}
+annotation class js_name(s : String)
trait Set : Collection
diff --git a/jslib/src/jquery/common.kt b/jslib/src/jquery/common.kt
index 29cc41dfdb2..c0fa8297599 100644
--- a/jslib/src/jquery/common.kt
+++ b/jslib/src/jquery/common.kt
@@ -1,26 +1,36 @@
package jquery;
fun fail() : Nothing = throw RuntimeException();
-
fun JQuery.toString() = ""
class JQuery() {
fun addClass(className : String) : JQuery = fail();
fun attr(attrName : String) = ""
fun attr(attrName : String, value : String) = this
- fun hasClass(attrName : String) = true
+ fun hasClass(className : String) = true
+ fun removeClass(className : String) = this
fun html() : String = ""
fun height() = 0
fun width() = 0
fun click() = this;
- fun click(handler : (DomElement)->Unit) = this;
+ fun click(handler : DomElement.()->Unit) = this;
fun append(str : String) = this;
+ fun ready(handler : ()->Unit) = this;
+ fun text(text : String) = this;
+ fun slideUp() = this;
+ fun hover(handlerInOut : DomElement.() -> Unit) = this;
+ fun hover(handlerIn : DomElement.() -> Unit, handlerOut : DomElement.() -> Unit) = this;
}
-class DomElement() {
+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();
diff --git a/translator/src/org/jetbrains/k2js/Analyzer.java b/translator/src/org/jetbrains/k2js/Analyzer.java
index a675e90f905..3715e965966 100644
--- a/translator/src/org/jetbrains/k2js/Analyzer.java
+++ b/translator/src/org/jetbrains/k2js/Analyzer.java
@@ -41,11 +41,7 @@ public final class Analyzer {
@NotNull
public static BindingContext analyzeFiles(@NotNull List files,
- @Nullable Project externalProject) {
- Project project = externalProject;
- if (project == null) {
- project = getProject(files);
- }
+ @NotNull Project project) {
final List jsLibFiles = getJsSupportStdLib(project);
List allFiles = allFiles(files, jsLibFiles);
return AnalyzingUtils.analyzeFiles(project, JsConfiguration.jsLibConfiguration(project),
diff --git a/translator/src/org/jetbrains/k2js/Config.java b/translator/src/org/jetbrains/k2js/Config.java
new file mode 100644
index 00000000000..5a51287c2c1
--- /dev/null
+++ b/translator/src/org/jetbrains/k2js/Config.java
@@ -0,0 +1,13 @@
+package org.jetbrains.k2js;
+
+import com.intellij.openapi.project.Project;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author Pavel Talanov
+ */
+public interface Config {
+
+ @NotNull
+ Project getProject();
+}
diff --git a/translator/src/org/jetbrains/k2js/IDEAConfig.java b/translator/src/org/jetbrains/k2js/IDEAConfig.java
new file mode 100644
index 00000000000..2b35c1eac89
--- /dev/null
+++ b/translator/src/org/jetbrains/k2js/IDEAConfig.java
@@ -0,0 +1,23 @@
+package org.jetbrains.k2js;
+
+import com.intellij.openapi.project.Project;
+import org.jetbrains.annotations.NotNull;
+
+/**
+ * @author Pavel Talanov
+ */
+public final class IDEAConfig implements Config {
+
+ @NotNull
+ private final Project project;
+
+ public IDEAConfig(@NotNull Project project) {
+ this.project = project;
+ }
+
+ @NotNull
+ @Override
+ public Project getProject() {
+ return project;
+ }
+}
diff --git a/translator/src/org/jetbrains/k2js/K2JSTranslator.java b/translator/src/org/jetbrains/k2js/K2JSTranslator.java
index 532f589d7a1..4e798993005 100644
--- a/translator/src/org/jetbrains/k2js/K2JSTranslator.java
+++ b/translator/src/org/jetbrains/k2js/K2JSTranslator.java
@@ -3,8 +3,8 @@ package org.jetbrains.k2js;
import com.google.dart.compiler.backend.js.ast.JsProgram;
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.jet.lang.psi.JetNamespaceHeader;
import org.jetbrains.jet.lang.resolve.AnalyzingUtils;
import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.k2js.generate.CodeGenerator;
@@ -20,8 +20,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.StringTokenizer;
-import static org.jetbrains.k2js.translate.utils.BindingUtils.getNamespaceDescriptor;
-import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getNameForNamespace;
+import static org.jetbrains.k2js.utils.JetFileUtils.createPsiFileList;
//TODO: clean up the code
@@ -30,66 +29,51 @@ import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getNameForNames
*/
public final class K2JSTranslator {
- public static void translatePsiFile(@NotNull JetFile file,
- @NotNull String outputFile,
- @NotNull Project project) throws Exception {
- (new K2JSTranslator()).generateAndSaveProgram(file, outputFile, project);
- }
-
- public static void doNothing() {
-
- }
-
public static void translateWithCallToMainAndSaveToFile(@NotNull JetFile file,
@NotNull String outputPath,
@NotNull Project project) throws Exception {
- K2JSTranslator translator = new K2JSTranslator();
- String programCode = translator.generateProgramCode(file, project) + "\n";
+ K2JSTranslator translator = new K2JSTranslator(new IDEAConfig(project));
+ String programCode = translator.generateProgramCode(file) + "\n";
String callToMain = translator.generateCallToMain(file, "");
FileWriter writer = new FileWriter(new File(outputPath));
writer.write(programCode + callToMain);
writer.close();
}
- @Nullable
- private BindingContext bindingContext = null;
-
- public K2JSTranslator() {
- }
-
- public void testTranslateFile(@NotNull String inputFile, @NotNull String outputFile) throws Exception {
- JetFile psiFile = JetFileUtils.loadPsiFile(inputFile, null);
- generateAndSaveProgram(psiFile, outputFile, null);
- }
-
- private void generateAndSaveProgram(@NotNull JetFile psiFile,
- @NotNull String outputFile,
- @Nullable Project project) throws IOException {
- JsProgram program = generateProgram(Arrays.asList(psiFile), project);
- CodeGenerator generator = new CodeGenerator();
- generator.generateToFile(program, new File(outputFile));
- }
-
- public void testTranslateFiles(@NotNull List inputFiles, @NotNull String outputFile) throws Exception {
- List psiFiles = createPsiFileList(inputFiles);
- JsProgram program = generateProgram(psiFiles, null);
- CodeGenerator generator = new CodeGenerator();
- generator.generateToFile(program, new File(outputFile));
+ public static void testTranslateFile(@NotNull String inputFile, @NotNull String outputFile) throws Exception {
+ K2JSTranslator translator = new K2JSTranslator(new TestConfig());
+ JetFile psiFile = JetFileUtils.loadPsiFile(inputFile, translator.getProject());
+ translator.generateAndSaveProgram(psiFile, outputFile);
}
@NotNull
- private List createPsiFileList(@NotNull List inputFiles) {
- List psiFiles = new ArrayList();
- for (String inputFile : inputFiles) {
- psiFiles.add(JetFileUtils.loadPsiFile(inputFile, null));
- }
- return psiFiles;
+ private Config config;
+
+ public K2JSTranslator(@NotNull Config config) {
+ this.config = config;
+ }
+
+
+ private void generateAndSaveProgram(@NotNull JetFile psiFile,
+ @NotNull String outputFile) throws IOException {
+ JsProgram program = generateProgram(Arrays.asList(psiFile));
+ CodeGenerator generator = new CodeGenerator();
+ generator.generateToFile(program, new File(outputFile));
+ }
+
+ public static void testTranslateFiles(@NotNull List inputFiles, @NotNull String outputFile)
+ throws Exception {
+ K2JSTranslator translator = new K2JSTranslator(new TestConfig());
+ List psiFiles = createPsiFileList(inputFiles, translator.getProject());
+ JsProgram program = translator.generateProgram(psiFiles);
+ CodeGenerator generator = new CodeGenerator();
+ generator.generateToFile(program, new File(outputFile));
}
@NotNull
public String translateStringWithCallToMain(@NotNull String programText, @NotNull String argumentsString) {
- JetFile file = JetFileUtils.createPsiFile("test", programText, null);
- String programCode = generateProgramCode(file, null) + "\n";
+ JetFile file = JetFileUtils.createPsiFile("test", programText, getProject());
+ String programCode = generateProgramCode(file) + "\n";
String flushOutput = "Kotlin.System.flush();\n";
String callToMain = generateCallToMain(file, argumentsString);
String programOutput = "Kotlin.System.output();\n";
@@ -97,23 +81,20 @@ public final class K2JSTranslator {
}
@NotNull
- private String generateProgramCode(@NotNull JetFile psiFile,
- @Nullable Project project) {
- JsProgram program = generateProgram(Arrays.asList(psiFile), project);
+ private String generateProgramCode(@NotNull JetFile psiFile) {
+ JsProgram program = generateProgram(Arrays.asList(psiFile));
CodeGenerator generator = new CodeGenerator();
return generator.generateToString(program);
}
@NotNull
- private JsProgram generateProgram(@NotNull List files,
- @Nullable Project project) {
- bindingContext = Analyzer.analyzeFiles(files, project);
+ private JsProgram generateProgram(@NotNull List files) {
+ BindingContext bindingContext = Analyzer.analyzeFiles(files, config.getProject());
for (JetFile file : files) {
AnalyzingUtils.checkForSyntacticErrors(file);
AnalyzingUtils.throwExceptionOnErrors(bindingContext);
}
- assert bindingContext != null;
JetFile file = files.iterator().next();
return Translation.generateAst(bindingContext, file, file.getProject());
}
@@ -138,8 +119,15 @@ public final class K2JSTranslator {
@NotNull
private String getRootNamespaceName(@NotNull JetFile psiFile) {
- assert bindingContext != null;
- return getNameForNamespace(getNamespaceDescriptor(bindingContext, psiFile));
+ JetNamespaceHeader namespaceHeader = psiFile.getNamespaceHeader();
+ String name = namespaceHeader.getName();
+ assert name != null : "NamespaceHeader must have a name";
+ return name;
+ }
+
+ @NotNull
+ private Project getProject() {
+ return config.getProject();
}
}
diff --git a/translator/src/org/jetbrains/k2js/K2JSTranslatorApplet.java b/translator/src/org/jetbrains/k2js/K2JSTranslatorApplet.java
index 77b030175fb..e8d9e5e36a2 100644
--- a/translator/src/org/jetbrains/k2js/K2JSTranslatorApplet.java
+++ b/translator/src/org/jetbrains/k2js/K2JSTranslatorApplet.java
@@ -36,7 +36,7 @@ public final class K2JSTranslatorApplet extends Applet {
@NotNull
private String generateJSCode(@NotNull String code, @NotNull String arguments) {
- String generatedCode = (new K2JSTranslator()).translateStringWithCallToMain(code, arguments);
+ String generatedCode = (new K2JSTranslator(new TestConfig())).translateStringWithCallToMain(code, arguments);
System.out.println("GENERATED JAVASCRIPT CODE:\n-----------------------------------\n");
System.out.println(generatedCode);
return generatedCode;
diff --git a/translator/src/org/jetbrains/k2js/TestConfig.java b/translator/src/org/jetbrains/k2js/TestConfig.java
new file mode 100644
index 00000000000..673d087df37
--- /dev/null
+++ b/translator/src/org/jetbrains/k2js/TestConfig.java
@@ -0,0 +1,37 @@
+package org.jetbrains.k2js;
+
+import com.intellij.openapi.Disposable;
+import com.intellij.openapi.project.Project;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+import org.jetbrains.jet.compiler.JetCoreEnvironment;
+
+/**
+ * @author Pavel Talanov
+ */
+public final class TestConfig implements Config {
+
+ @NotNull
+ private static JetCoreEnvironment getTestEnvironment() {
+ if (testOnlyEnvironment == null) {
+ testOnlyEnvironment = new JetCoreEnvironment(new Disposable() {
+ @Override
+ public void dispose() {
+ }
+ });
+ }
+ return testOnlyEnvironment;
+ }
+
+ @Nullable
+ private static /*var*/ JetCoreEnvironment testOnlyEnvironment = null;
+
+ public TestConfig() {
+ }
+
+ @NotNull
+ @Override
+ public Project getProject() {
+ return getTestEnvironment().getProject();
+ }
+}
diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java
index fe520679c42..e6a77550517 100644
--- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java
+++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java
@@ -103,9 +103,11 @@ public final class StandardClasses {
private static void declareJQuery(@NotNull StandardClasses standardClasses) {
standardClasses.declare().forFQ("jquery.JQuery").externalClass("jQuery")
- .methods("addClass", "attr", "hasClass", "append", "text", "ready");
+ .methods("addClass", "attr", "hasClass", "append",
+ "text", "ready", "click", "hover", "slideUp",
+ "removeClass");
standardClasses.declare().forFQ("jquery.jq").externalFunction("jQuery");
- standardClasses.declare().forFQ("jquery.get-document").externalObject("document");
+ //standardClasses.declare().forFQ("jquery.get-document").externalObject("document");
}
//TODO: test all the methods
diff --git a/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java b/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java
index e06a7e9e177..ff9bceaf284 100644
--- a/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java
+++ b/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java
@@ -1,6 +1,5 @@
package org.jetbrains.k2js.utils;
-import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.text.StringUtil;
@@ -10,27 +9,19 @@ import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.impl.PsiFileFactoryImpl;
import com.intellij.testFramework.LightVirtualFile;
import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-import org.jetbrains.jet.compiler.JetCoreEnvironment;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.plugin.JetLanguage;
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
/**
* @author Pavel Talanov
*/
public final class JetFileUtils {
- @NotNull
- private static JetCoreEnvironment testOnlyEnvironment = new JetCoreEnvironment(new Disposable() {
-
- @Override
- public void dispose() {
- }
- });
-
@NotNull
public static String loadFile(@NotNull String path) throws IOException {
return doLoadFile(path);
@@ -46,12 +37,12 @@ public final class JetFileUtils {
@NotNull
public static JetFile createPsiFile(@NotNull String name,
@NotNull String text,
- @Nullable Project project) {
+ @NotNull Project project) {
return (JetFile) createFile(name + ".jet", text, project);
}
@NotNull
- public static JetFile loadPsiFile(@NotNull String name, @Nullable Project project) {
+ public static JetFile loadPsiFile(@NotNull String name, @NotNull Project project) {
try {
return createPsiFile(name, loadFile(name), project);
} catch (IOException e) {
@@ -60,18 +51,23 @@ public final class JetFileUtils {
}
@NotNull
- private static PsiFile createFile(@NotNull String name, @NotNull String text, @Nullable Project project) {
+ private static PsiFile createFile(@NotNull String name, @NotNull String text, @NotNull Project project) {
LightVirtualFile virtualFile = new LightVirtualFile(name, JetLanguage.INSTANCE, text);
virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET);
- Project realProject = project;
- if (realProject == null) {
- realProject = testOnlyEnvironment.getProject();
- //throw new RuntimeException();
- }
- PsiFile result = ((PsiFileFactoryImpl) PsiFileFactory.getInstance(realProject))
+ PsiFile result = ((PsiFileFactoryImpl) PsiFileFactory.getInstance(project))
.trySetupPsiForFile(virtualFile, JetLanguage.INSTANCE, true, false);
assert result != null;
return result;
}
+
+ @NotNull
+ public static List createPsiFileList(@NotNull List inputFiles,
+ @NotNull Project project) {
+ List psiFiles = new ArrayList();
+ for (String inputFile : inputFiles) {
+ psiFiles.add(JetFileUtils.loadPsiFile(inputFile, project));
+ }
+ return psiFiles;
+ }
}
diff --git a/translator/test/org/jetbrains/k2js/test/TranslationTest.java b/translator/test/org/jetbrains/k2js/test/TranslationTest.java
index 87032babce5..5d31c2abfec 100644
--- a/translator/test/org/jetbrains/k2js/test/TranslationTest.java
+++ b/translator/test/org/jetbrains/k2js/test/TranslationTest.java
@@ -81,7 +81,7 @@ public abstract class TranslationTest {
}
protected void translateFile(String filename) throws Exception {
- (new K2JSTranslator()).testTranslateFile(getInputFilePath(filename), getOutputFilePath(filename));
+ K2JSTranslator.testTranslateFile(getInputFilePath(filename), getOutputFilePath(filename));
}
protected void translateFilesInDir(String dirName) throws Exception {
@@ -92,7 +92,7 @@ public abstract class TranslationTest {
fullFilePaths.add(getInputFilePath(dirName) + "\\" + fileName);
}
assert dir.isDirectory();
- (new K2JSTranslator()).testTranslateFiles(fullFilePaths, getOutputFilePath(dirName + ".kt"));
+ K2JSTranslator.testTranslateFiles(fullFilePaths, getOutputFilePath(dirName + ".kt"));
}
protected List generateFilenameList(String inputFile) {