added applet class.
This commit is contained in:
@@ -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>) {}"));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user