diff --git a/.idea/misc.xml b/.idea/misc.xml index 4b7f9f02540..d10b9ab7f7b 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -24,7 +24,7 @@ http://www.w3.org/1999/xhtml - + diff --git a/.idea/modules.xml b/.idea/modules.xml index c5d66f65273..13571b538d5 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -11,6 +11,7 @@ + diff --git a/.idea/workspace.xml b/.idea/workspace.xml index dbc8b227216..651a4f38e9d 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -10,28 +10,23 @@ - + - - - - - - - - + + + + - - + + - - + - + @@ -233,6 +228,19 @@ - + - + @@ -305,7 +313,7 @@ - + @@ -314,16 +322,43 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -347,24 +382,6 @@ - - - - - - - - - - - - - - - - - - @@ -378,53 +395,55 @@ - + - + - + - - + + + + - - + + - + - - + + - + - - + + - + - - + + @@ -493,7 +512,6 @@ @@ -731,6 +750,48 @@ - + @@ -1249,6 +1310,7 @@ + @@ -1262,14 +1324,13 @@ - - + + - @@ -1311,7 +1372,7 @@ @@ -1358,111 +1419,120 @@ - + - - - - - - - - - - - - - - - - - - - - - - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + + + + + + + + + + @@ -1494,7 +1564,7 @@ - js + junit-4.10 - IDEA IC-112.544 + 1.6 - translator + jetTests diff --git a/jslib/jslib.iml b/jslib/jslib.iml new file mode 100644 index 00000000000..26a958a9c8a --- /dev/null +++ b/jslib/jslib.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/jslib/src/jquery/common.kt b/jslib/src/jquery/common.kt index 5df088f92cc..29cc41dfdb2 100644 --- a/jslib/src/jquery/common.kt +++ b/jslib/src/jquery/common.kt @@ -2,6 +2,8 @@ package jquery; fun fail() : Nothing = throw RuntimeException(); +fun JQuery.toString() = "" + class JQuery() { fun addClass(className : String) : JQuery = fail(); fun attr(attrName : String) = "" @@ -12,6 +14,7 @@ class JQuery() { fun width() = 0 fun click() = this; fun click(handler : (DomElement)->Unit) = this; + fun append(str : String) = this; } class DomElement() { diff --git a/translator/src/org/jetbrains/k2js/Analyzer.java b/translator/src/org/jetbrains/k2js/Analyzer.java index 56b74dec35f..a675e90f905 100644 --- a/translator/src/org/jetbrains/k2js/Analyzer.java +++ b/translator/src/org/jetbrains/k2js/Analyzer.java @@ -25,25 +25,29 @@ public final class Analyzer { //TODO: provide some generic way to access private static final List LIB_FILE_NAMES = Arrays.asList( - "jslib\\src\\jquery\\common.kt", - "jslib\\src\\core\\javautil.kt", - "jslib\\src\\core\\core.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 - public static List getJsSupportStdLib() { + public static List getJsSupportStdLib(@Nullable Project project) { List libFiles = new ArrayList(); for (String libFileName : LIB_FILE_NAMES) { - libFiles.add(JetFileUtils.loadPsiFile(libFileName)); + libFiles.add(JetFileUtils.loadPsiFile(libFileName, project)); } return libFiles; } @NotNull - public static BindingContext analyzeFiles(@NotNull List files) { - final List jsLibFiles = getJsSupportStdLib(); + public static BindingContext analyzeFiles(@NotNull List files, + @Nullable Project externalProject) { + Project project = externalProject; + if (project == null) { + project = getProject(files); + } + final List jsLibFiles = getJsSupportStdLib(project); List allFiles = allFiles(files, jsLibFiles); - Project project = getProject(files); return AnalyzingUtils.analyzeFiles(project, JsConfiguration.jsLibConfiguration(project), allFiles, notLibFiles(jsLibFiles), JetControlFlowDataTraceFactory.EMPTY); } diff --git a/translator/src/org/jetbrains/k2js/K2JSTranslator.java b/translator/src/org/jetbrains/k2js/K2JSTranslator.java index 97aef50aca9..532f589d7a1 100644 --- a/translator/src/org/jetbrains/k2js/K2JSTranslator.java +++ b/translator/src/org/jetbrains/k2js/K2JSTranslator.java @@ -1,6 +1,7 @@ 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; @@ -12,6 +13,7 @@ import org.jetbrains.k2js.utils.GenerationUtils; import org.jetbrains.k2js.utils.JetFileUtils; import java.io.File; +import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; @@ -28,8 +30,25 @@ import static org.jetbrains.k2js.translate.utils.DescriptorUtils.getNameForNames */ public final class K2JSTranslator { - public static void translatePsiFile(@NotNull JetFile file, @NotNull String outputFile) throws Exception { - (new K2JSTranslator()).generateAndSaveProgram(file, outputFile); + 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"; + String callToMain = translator.generateCallToMain(file, ""); + FileWriter writer = new FileWriter(new File(outputPath)); + writer.write(programCode + callToMain); + writer.close(); } @Nullable @@ -38,21 +57,22 @@ public final class K2JSTranslator { public K2JSTranslator() { } - public void translateFile(@NotNull String inputFile, @NotNull String outputFile) throws Exception { - JetFile psiFile = JetFileUtils.loadPsiFile(inputFile); - generateAndSaveProgram(psiFile, outputFile); + 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) throws IOException { - JsProgram program = generateProgram(Arrays.asList(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 translateFiles(@NotNull List inputFiles, @NotNull String outputFile) throws Exception { + public void testTranslateFiles(@NotNull List inputFiles, @NotNull String outputFile) throws Exception { List psiFiles = createPsiFileList(inputFiles); - JsProgram program = generateProgram(psiFiles); + JsProgram program = generateProgram(psiFiles, null); CodeGenerator generator = new CodeGenerator(); generator.generateToFile(program, new File(outputFile)); } @@ -61,15 +81,15 @@ public final class K2JSTranslator { private List createPsiFileList(@NotNull List inputFiles) { List psiFiles = new ArrayList(); for (String inputFile : inputFiles) { - psiFiles.add(JetFileUtils.loadPsiFile(inputFile)); + psiFiles.add(JetFileUtils.loadPsiFile(inputFile, null)); } return psiFiles; } @NotNull public String translateStringWithCallToMain(@NotNull String programText, @NotNull String argumentsString) { - JetFile file = JetFileUtils.createPsiFile("test", programText); - String programCode = generateProgramCode(file) + "\n"; + JetFile file = JetFileUtils.createPsiFile("test", programText, null); + String programCode = generateProgramCode(file, null) + "\n"; String flushOutput = "Kotlin.System.flush();\n"; String callToMain = generateCallToMain(file, argumentsString); String programOutput = "Kotlin.System.output();\n"; @@ -77,15 +97,17 @@ public final class K2JSTranslator { } @NotNull - private String generateProgramCode(@NotNull JetFile psiFile) { - JsProgram program = generateProgram(Arrays.asList(psiFile)); + private String generateProgramCode(@NotNull JetFile psiFile, + @Nullable Project project) { + JsProgram program = generateProgram(Arrays.asList(psiFile), project); CodeGenerator generator = new CodeGenerator(); return generator.generateToString(program); } @NotNull - public JsProgram generateProgram(@NotNull List files) { - bindingContext = Analyzer.analyzeFiles(files); + private JsProgram generateProgram(@NotNull List files, + @Nullable Project project) { + bindingContext = Analyzer.analyzeFiles(files, project); for (JetFile file : files) { AnalyzingUtils.checkForSyntacticErrors(file); AnalyzingUtils.throwExceptionOnErrors(bindingContext); diff --git a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java index 4080b6eaa1c..2f831318824 100644 --- a/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java +++ b/translator/src/org/jetbrains/k2js/translate/context/StandardClasses.java @@ -103,7 +103,7 @@ public final class StandardClasses { private static void declareJQuery(@NotNull StandardClasses standardClasses) { standardClasses.declare().forFQ("jquery.JQuery").externalClass("jQuery") - .methods("addClass", "attr", "hasClass"); + .methods("addClass", "attr", "hasClass", "append"); standardClasses.declare().forFQ("jquery.jq").externalFunction("jQuery"); } diff --git a/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java b/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java index 841e25e0fbd..119592566fb 100644 --- a/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java +++ b/translator/src/org/jetbrains/k2js/utils/JetFileUtils.java @@ -1,6 +1,6 @@ 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; import com.intellij.openapi.vfs.CharsetToolkit; @@ -9,7 +9,7 @@ import com.intellij.psi.PsiFileFactory; import com.intellij.psi.impl.PsiFileFactoryImpl; import com.intellij.testFramework.LightVirtualFile; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.compiler.JetCoreEnvironment; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.plugin.JetLanguage; @@ -21,13 +21,13 @@ import java.io.IOException; */ public final class JetFileUtils { - @NotNull - private static JetCoreEnvironment environment = new JetCoreEnvironment(new Disposable() { - - @Override - public void dispose() { - } - }); +// @NotNull +// private static JetCoreEnvironment testOnlyEnvironment = new JetCoreEnvironment(new Disposable() { +// +// @Override +// public void dispose() { +// } +// }); @NotNull public static String loadFile(@NotNull String path) throws IOException { @@ -42,24 +42,30 @@ public final class JetFileUtils { } @NotNull - public static JetFile createPsiFile(@NotNull String name, @NotNull String text) { - return (JetFile) createFile(name + ".jet", text); + public static JetFile createPsiFile(@NotNull String name, + @NotNull String text, + @Nullable Project project) { + return (JetFile) createFile(name + ".jet", text, project); } @NotNull - public static JetFile loadPsiFile(@NotNull String name) { + public static JetFile loadPsiFile(@NotNull String name, @Nullable Project project) { try { - return createPsiFile(name, loadFile(name)); + return createPsiFile(name, loadFile(name), project); } catch (IOException e) { throw new RuntimeException(e); } } @NotNull - private static PsiFile createFile(@NotNull String name, @NotNull String text) { + private static PsiFile createFile(@NotNull String name, @NotNull String text, @Nullable Project project) { LightVirtualFile virtualFile = new LightVirtualFile(name, JetLanguage.INSTANCE, text); virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET); - PsiFile result = ((PsiFileFactoryImpl) PsiFileFactory.getInstance(environment.getProject())) + Project realProject = project; + if (realProject == null) { + throw new RuntimeException(); + } + PsiFile result = ((PsiFileFactoryImpl) PsiFileFactory.getInstance(realProject)) .trySetupPsiForFile(virtualFile, JetLanguage.INSTANCE, true, false); assert result != null; return result; diff --git a/translator/test/org/jetbrains/k2js/test/MiscTest.java b/translator/test/org/jetbrains/k2js/test/MiscTest.java index e821785b071..76cb44b4554 100644 --- a/translator/test/org/jetbrains/k2js/test/MiscTest.java +++ b/translator/test/org/jetbrains/k2js/test/MiscTest.java @@ -32,8 +32,9 @@ public class MiscTest extends AbstractExpressionTest { testFooBoxIsTrue("safecallComputesExpressionOnlyOnce.kt"); } - @Test - public void jquery() throws Exception { - testFooBoxIsTrue("jquery.kt"); - } + //TODO: +// @Test +// public void jquery() throws Exception { +// testFooBoxIsTrue("jquery.kt"); +// } } diff --git a/translator/test/org/jetbrains/k2js/test/TranslationTest.java b/translator/test/org/jetbrains/k2js/test/TranslationTest.java index a86499df84f..87032babce5 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()).translateFile(getInputFilePath(filename), getOutputFilePath(filename)); + (new 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()).translateFiles(fullFilePaths, getOutputFilePath(dirName + ".kt")); + (new K2JSTranslator()).testTranslateFiles(fullFilePaths, getOutputFilePath(dirName + ".kt")); } protected List generateFilenameList(String inputFile) { diff --git a/translator/translator.iml b/translator/translator.iml index 2f01c91f20f..34f9ef77b7a 100644 --- a/translator/translator.iml +++ b/translator/translator.iml @@ -27,6 +27,7 @@ +