minor refactor to make KotlinCompiler easier to extend (to make command line based compiler tools with configurable plugins)
This commit is contained in:
@@ -37,9 +37,6 @@ public class KotlinCompiler {
|
||||
}
|
||||
};
|
||||
|
||||
private KotlinCompiler() {
|
||||
}
|
||||
|
||||
public static class Arguments {
|
||||
@Argument(value = "output", description = "output directory")
|
||||
public String outputDir;
|
||||
@@ -84,7 +81,7 @@ public class KotlinCompiler {
|
||||
|
||||
public static void main(String... args) {
|
||||
try {
|
||||
int rc = exec(args);
|
||||
int rc = new KotlinCompiler().exec(args);
|
||||
if (rc != 0) {
|
||||
System.err.println("exec() finished with " + rc + " return code");
|
||||
System.exit(rc);
|
||||
@@ -95,11 +92,11 @@ public class KotlinCompiler {
|
||||
}
|
||||
}
|
||||
|
||||
public static int exec(String... args) {
|
||||
public int exec(String... args) {
|
||||
return exec(System.out, args);
|
||||
}
|
||||
|
||||
public static int exec(PrintStream errStream, String... args) {
|
||||
public int exec(PrintStream errStream, String... args) {
|
||||
System.setProperty("java.awt.headless", "true");
|
||||
Arguments arguments = new Arguments();
|
||||
try {
|
||||
@@ -126,22 +123,7 @@ public class KotlinCompiler {
|
||||
MessageRenderer messageRenderer = arguments.tags ? MessageRenderer.TAGS : MessageRenderer.PLAIN;
|
||||
CompileEnvironment environment = new CompileEnvironment(fileNameTransformer, messageRenderer);
|
||||
try {
|
||||
environment.setIgnoreErrors(false);
|
||||
environment.setErrorStream(errStream);
|
||||
|
||||
environment.setStubs(arguments.stubs);
|
||||
|
||||
if (arguments.docOutputDir != null) {
|
||||
KDocLoader.install(arguments.docOutputDir, environment.getMyEnvironment());
|
||||
}
|
||||
|
||||
if (arguments.stdlib != null) {
|
||||
environment.setStdlib(arguments.stdlib);
|
||||
}
|
||||
|
||||
if (arguments.classpath != null) {
|
||||
environment.addToClasspath(arguments.classpath);
|
||||
}
|
||||
configureEnvironment(environment, arguments, errStream);
|
||||
|
||||
boolean noErrors;
|
||||
if (arguments.module != null) {
|
||||
@@ -150,7 +132,6 @@ public class KotlinCompiler {
|
||||
else {
|
||||
noErrors = environment.compileBunchOfSources(arguments.src, arguments.jar, arguments.outputDir, arguments.includeRuntime);
|
||||
}
|
||||
|
||||
return noErrors ? 0 : 1;
|
||||
}
|
||||
catch (Throwable t) {
|
||||
@@ -161,4 +142,27 @@ public class KotlinCompiler {
|
||||
environment.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Strategy method to configure the environment, allowing compiler
|
||||
* based tools to customise their own plugins
|
||||
*/
|
||||
protected void configureEnvironment(CompileEnvironment environment, Arguments arguments, PrintStream errStream) {
|
||||
environment.setIgnoreErrors(false);
|
||||
environment.setErrorStream(errStream);
|
||||
|
||||
environment.setStubs(arguments.stubs);
|
||||
|
||||
if (arguments.docOutputDir != null) {
|
||||
KDocLoader.install(arguments.docOutputDir, environment.getMyEnvironment());
|
||||
}
|
||||
|
||||
if (arguments.stdlib != null) {
|
||||
environment.setStdlib(arguments.stdlib);
|
||||
}
|
||||
|
||||
if (arguments.classpath != null) {
|
||||
environment.addToClasspath(arguments.classpath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@ public class ForTestCompileStdlib {
|
||||
|
||||
private static void compileKotlinPartOfStdlib(File destdir) throws IOException {
|
||||
// lame
|
||||
KotlinCompiler.exec(System.err, "-output", destdir.getPath(), "-src", "./libraries/stdlib/src", "-stdlib", destdir.getAbsolutePath());
|
||||
new KotlinCompiler().exec(System.err, "-output", destdir.getPath(), "-src", "./libraries/stdlib/src", "-stdlib", destdir.getAbsolutePath());
|
||||
}
|
||||
|
||||
private static List<File> javaFilesInDir(File dir) {
|
||||
|
||||
@@ -55,7 +55,7 @@ public class CompileEnvironmentTest extends TestCase {
|
||||
try {
|
||||
File stdlib = ForTestCompileStdlib.stdlibJarForTests();
|
||||
File resultJar = new File(tempDir, "result.jar");
|
||||
int rv = KotlinCompiler.exec("-module", JetParsingTest.getTestDataDir() + "/compiler/smoke/Smoke.kts",
|
||||
int rv = new KotlinCompiler().exec("-module", JetParsingTest.getTestDataDir() + "/compiler/smoke/Smoke.kts",
|
||||
"-jar", resultJar.getAbsolutePath(),
|
||||
"-stdlib", stdlib.getAbsolutePath());
|
||||
Assert.assertEquals("compilation completed with non-zero code", 0, rv);
|
||||
@@ -85,7 +85,7 @@ public class CompileEnvironmentTest extends TestCase {
|
||||
try {
|
||||
File out = new File(tempDir, "out");
|
||||
File stdlib = ForTestCompileStdlib.stdlibJarForTests();
|
||||
KotlinCompiler.exec("-src", JetParsingTest.getTestDataDir() + "/compiler/smoke/Smoke.kt",
|
||||
new KotlinCompiler().exec("-src", JetParsingTest.getTestDataDir() + "/compiler/smoke/Smoke.kt",
|
||||
"-output", out.getAbsolutePath(),
|
||||
"-stdlib", stdlib.getAbsolutePath());
|
||||
|
||||
|
||||
Reference in New Issue
Block a user