compiler options

This commit is contained in:
Alex Tkachman
2011-10-22 20:22:41 +02:00
parent b905568147
commit d76c5d47fd
2 changed files with 34 additions and 13 deletions
@@ -6,9 +6,10 @@ import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project; import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiFile; import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager; import com.intellij.psi.PsiManager;
import com.sampullara.cli.Args;
import com.sampullara.cli.Argument;
import org.jetbrains.jet.codegen.ClassFileFactory; import org.jetbrains.jet.codegen.ClassFileFactory;
import org.jetbrains.jet.codegen.GenerationState; import org.jetbrains.jet.codegen.GenerationState;
import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory; import org.jetbrains.jet.lang.cfg.pseudocode.JetControlFlowDataTraceFactory;
@@ -32,10 +33,22 @@ import java.util.List;
* @author alex.tkachman * @author alex.tkachman
*/ */
public class KotlinCompiler { public class KotlinCompiler {
public static class Arguments {
@Argument(value = "output", description = "output directory")
public String outputDir;
@Argument(value = "src", description = "source file or directory", required = true)
public String src;
}
public static void main(String[] args) { public static void main(String[] args) {
System.setProperty("java.awt.headless", "true"); System.setProperty("java.awt.headless", "true");
if (args.length < 1) { Arguments arguments = new Arguments();
System.out.println("Usage: KotlinCompiler <filename> or <dirname>"); try {
Args.parse(arguments, args);
}
catch (Throwable t) {
System.out.println("Usage: KotlinCompiler -output <outputDir> -src <filename or dirname>");
t.printStackTrace();
return; return;
} }
@@ -54,9 +67,9 @@ public class KotlinCompiler {
environment.registerFileType(JetFileType.INSTANCE, "kt"); environment.registerFileType(JetFileType.INSTANCE, "kt");
environment.registerParserDefinition(new JetParserDefinition()); environment.registerParserDefinition(new JetParserDefinition());
VirtualFile vFile = environment.getLocalFileSystem().findFileByPath(args [0]); VirtualFile vFile = environment.getLocalFileSystem().findFileByPath(arguments.src);
if (vFile == null) { if (vFile == null) {
System.out.print("File/directory not found: " + args[0]); System.out.print("File/directory not found: " + arguments.src);
return; return;
} }
@@ -100,14 +113,19 @@ public class KotlinCompiler {
generationState.compileCorrectNamespaces(bindingContext, namespaces); generationState.compileCorrectNamespaces(bindingContext, namespaces);
final ClassFileFactory factory = generationState.getFactory(); final ClassFileFactory factory = generationState.getFactory();
List<String> files = factory.files(); if(arguments.outputDir == null) {
for (String file : files) { System.out.println("Output directory is not specified - no files will be saved to the disk");
File target = new File(vFile.getParent().getPath(), file); }
try { else {
FileUtil.writeToFile(target, factory.asBytes(file)); List<String> files = factory.files();
System.out.println("Generated classfile: " + target); for (String file : files) {
} catch (IOException e) { File target = new File(arguments.outputDir, file);
System.out.println(e.getMessage()); try {
FileUtil.writeToFile(target, factory.asBytes(file));
System.out.println("Generated classfile: " + target);
} catch (IOException e) {
System.out.println(e.getMessage());
}
} }
} }
} }
+3
View File
@@ -0,0 +1,3 @@
trait ISized {
val size : Int
}