diff --git a/compiler/cli/src/org/jetbrains/jet/cli/KotlinCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/KotlinCompiler.java index 76b28a2e74b..6a5a0f0ce3d 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/KotlinCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/KotlinCompiler.java @@ -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); + } + } } diff --git a/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java b/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java index e53e4bf2651..2fd7eb880cb 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ForTestCompileStdlib.java @@ -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 javaFilesInDir(File dir) { diff --git a/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java b/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java index 4346a5ea88d..a13af6cd1f0 100644 --- a/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java +++ b/compiler/tests/org/jetbrains/jet/compiler/CompileEnvironmentTest.java @@ -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());