added applet class.

This commit is contained in:
Pavel Talanov
2011-12-14 14:29:04 +04:00
parent 7a1645efc3
commit 75f407cc44
5 changed files with 91 additions and 25 deletions
@@ -10,9 +10,9 @@ import com.intellij.psi.PsiFileFactory;
import com.intellij.psi.impl.PsiFileFactoryImpl;
import com.intellij.testFramework.LightVirtualFile;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.JetCoreEnvironment;
import org.jetbrains.jet.compiler.CompileEnvironment;
import org.jetbrains.jet.compiler.CompileEnvironmentException;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetNamespace;
@@ -40,43 +40,57 @@ public final class K2JSTranslator {
public K2JSTranslator() {
}
public void translateFile(String inputFile, String outputFile) throws Exception {
public void translateFile(@NotNull String inputFile, @NotNull String outputFile) throws Exception {
try {
JetFile PsiFile = loadPsiFile(inputFile);
final File rtJar = CompileEnvironment.findRtJar(true);
myEnvironment.addToClasspath(rtJar);
JsProgram program = generateProgram(PsiFile);
JetNamespace namespace = loadPsiFile(inputFile).getRootNamespace();
BindingContext bindingContext = JetTestUtils.analyzeNamespace(namespace,
JetControlFlowDataTraceFactory.EMPTY);
JsProgram program = Translation.generateAst(bindingContext, namespace, myEnvironment.getProject());
CodeGenerator generator = new CodeGenerator();
generator.generateToFile(program, new File(outputFile));
} catch (CompileEnvironmentException e) {
System.out.println(e.getMessage());
}
CodeGenerator generator = new CodeGenerator();
generator.generateToFile(program, new File(outputFile));
}
protected String loadFile(String path) throws IOException {
@NotNull
public String translateString(@NotNull String programText) {
JetFile PsiFile = createPsiFile("test", programText);
JsProgram program = generateProgram(PsiFile);
CodeGenerator generator = new CodeGenerator();
return generator.generateToString(program);
}
@NotNull
private JsProgram generateProgram(@NotNull JetFile psiFile) {
final File rtJar = CompileEnvironment.findRtJar(true);
myEnvironment.addToClasspath(rtJar);
JetNamespace namespace = psiFile.getRootNamespace();
BindingContext bindingContext = JetTestUtils.analyzeNamespace(namespace,
JetControlFlowDataTraceFactory.EMPTY);
return Translation.generateAst(bindingContext, namespace, myEnvironment.getProject());
}
@NotNull
protected String loadFile(@NotNull String path) throws IOException {
return doLoadFile(path);
}
protected String doLoadFile(String path) throws IOException {
@NotNull
protected String doLoadFile(@NotNull String path) throws IOException {
String text = FileUtil.loadFile(new File(path), CharsetToolkit.UTF8).trim();
text = StringUtil.convertLineSeparators(text);
return text;
}
protected JetFile createPsiFile(String name, String text) {
@NotNull
protected JetFile createPsiFile(@NotNull String name, @NotNull String text) {
return (JetFile) createFile(name + ".jet", text);
}
protected JetFile loadPsiFile(String name) {
@NotNull
protected JetFile loadPsiFile(@NotNull String name) {
try {
return createPsiFile(name, loadFile(name));
} catch (IOException e) {
@@ -84,6 +98,7 @@ public final class K2JSTranslator {
}
}
@NotNull
protected PsiFile createFile(@NonNls String name, String text) {
LightVirtualFile virtualFile = new LightVirtualFile(name, JetLanguage.INSTANCE, text);
virtualFile.setCharset(CharsetToolkit.UTF8_CHARSET);
@@ -0,0 +1,19 @@
package org.jetbrains.k2js;
import org.jetbrains.annotations.NotNull;
import java.applet.Applet;
/**
* @author Talanov Pavel
*/
public final class K2JSTranslatorApplet extends Applet {
@NotNull
public String translate(@NotNull String code) {
String generatedCode = (new K2JSTranslator()).translateString(code);
System.out.println("GENERATED JAVASCRIPT CODE:\n-----------------------------------\n");
System.out.println(generatedCode);
return generatedCode;
}
}
@@ -4,6 +4,7 @@ import com.google.dart.compiler.backend.js.JsSourceGenerationVisitor;
import com.google.dart.compiler.backend.js.ast.JsProgram;
import com.google.dart.compiler.util.DefaultTextOutput;
import com.google.dart.compiler.util.TextOutput;
import org.jetbrains.annotations.NotNull;
import java.io.File;
import java.io.FileWriter;
@@ -14,25 +15,32 @@ import java.io.IOException;
*/
public final class CodeGenerator {
@NotNull
private final TextOutput output = new DefaultTextOutput(false);
public CodeGenerator() {
}
public void generateToConsole(JsProgram program) {
public void generateToConsole(@NotNull JsProgram program) {
generateCode(program);
System.out.println(output.toString());
}
public void generateToFile(JsProgram program, File file) throws IOException {
public void generateToFile(@NotNull JsProgram program, @NotNull File file) throws IOException {
generateCode(program);
FileWriter writer = new FileWriter(file);
writer.write(output.toString());
writer.close();
}
private void generateCode(JsProgram program) {
@NotNull
public String generateToString(@NotNull JsProgram program) {
generateCode(program);
return output.toString();
}
private void generateCode(@NotNull JsProgram program) {
JsSourceGenerationVisitor sourceGenerator =
new JsSourceGenerationVisitor(output);
program.traverse(sourceGenerator, null);
@@ -12,6 +12,8 @@ import java.util.Map;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getSuperclassDescriptors;
//TODO: can optimise using less dumb implementation
/**
* @author Talanov Pavel
*/
@@ -0,0 +1,22 @@
package org.jetbrains.k2js.test;
import org.jetbrains.k2js.K2JSTranslatorApplet;
import org.junit.Test;
/**
* @author Talanov Pavel
*/
public final class AppletTest extends TranslationTest {
final private static String MAIN = "applet/";
@Override
protected String mainDirectory() {
return MAIN;
}
@Test
public void simpleTest() throws Exception {
System.out.println((new K2JSTranslatorApplet()).translate("fun main(args : Array<String>) {}"));
}
}