From 35f1de468f89aba5044865bf30cae50b81b3cc79 Mon Sep 17 00:00:00 2001 From: Stepan Koltsov Date: Sun, 10 Jun 2012 03:44:29 +0400 Subject: [PATCH] refactor compiler launcher * method should not modify input * replace String with File * add @NotNull and @Nullable annotations --- .../jet/buildtools/core/BytecodeCompiler.java | 13 ++++++++---- .../jetbrains/jet/cli/jvm/K2JVMCompiler.java | 21 ++++++++++++------- .../jvm/compiler/CompileEnvironmentUtil.java | 2 +- .../compiler/KotlinToJVMBytecodeCompiler.java | 16 +++++++------- .../CompileJavaAgainstKotlinTest.java | 2 +- .../CompileKotlinAgainstKotlinTest.java | 4 ++-- .../compiler/ReadKotlinBinaryClassTest.java | 2 +- .../cli/jvm/compiler/WriteSignatureTest.java | 2 +- 8 files changed, 36 insertions(+), 26 deletions(-) diff --git a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java index 7471bfdb3c9..cbfcf4b1e2a 100644 --- a/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java +++ b/build-tools/core/src/org/jetbrains/jet/buildtools/core/BytecodeCompiler.java @@ -97,8 +97,10 @@ public class BytecodeCompiler { */ public void sourcesToDir ( @NotNull String src, @NotNull String output, @Nullable String stdlib, @Nullable String[] classpath ) { try { - boolean success = KotlinToJVMBytecodeCompiler.compileBunchOfSources(env(stdlib, classpath), Collections.singletonList(src), null, output, false, true - /* Last arg is ignored anyway */); + K2JVMCompileEnvironmentConfiguration configuration = env(stdlib, classpath); + configuration.getEnvironment().addSources(src); + + boolean success = KotlinToJVMBytecodeCompiler.compileBunchOfSources(configuration, null, new File(output), false, true); if ( ! success ) { throw new CompileEnvironmentException( errorMessage( src, false )); } @@ -120,7 +122,10 @@ public class BytecodeCompiler { */ public void sourcesToJar ( @NotNull String src, @NotNull String jar, boolean includeRuntime, @Nullable String stdlib, @Nullable String[] classpath ) { try { - boolean success = KotlinToJVMBytecodeCompiler.compileBunchOfSources(env(stdlib, classpath), Collections.singletonList(src), jar, null, false, includeRuntime); + K2JVMCompileEnvironmentConfiguration configuration = env(stdlib, classpath); + configuration.getEnvironment().addSources(src); + + boolean success = KotlinToJVMBytecodeCompiler.compileBunchOfSources(configuration, new File(jar), null, false, includeRuntime); if ( ! success ) { throw new CompileEnvironmentException( errorMessage( src, false )); } @@ -145,7 +150,7 @@ public class BytecodeCompiler { K2JVMCompileEnvironmentConfiguration env = env(stdlib, classpath); List modules = CompileEnvironmentUtil.loadModuleScript(module, env.getMessageCollector()); File directory = new File(module).getParentFile(); - boolean success = KotlinToJVMBytecodeCompiler.compileModules(env, modules, directory, jar, null, includeRuntime); + boolean success = KotlinToJVMBytecodeCompiler.compileModules(env, modules, directory, new File(jar), null, includeRuntime); if ( ! success ) { throw new CompileEnvironmentException( errorMessage( module, false )); } diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java index 35eee0392b4..ba9f498afb0 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java @@ -106,6 +106,9 @@ public class K2JVMCompiler extends CLICompiler sources = Lists.newArrayList(); if (arguments.src != null) { - sources.add(arguments.src); + configuration.getEnvironment().addSources(arguments.src); } if (arguments.script) { - sources.add(arguments.freeArgs.get(0)); + configuration.getEnvironment().addSources(arguments.freeArgs.get(0)); } else { - sources.addAll(arguments.freeArgs); + for (String freeArg : arguments.freeArgs) { + configuration.getEnvironment().addSources(freeArg); + } } - noErrors = KotlinToJVMBytecodeCompiler.compileBunchOfSources(configuration, - sources, arguments.jar, arguments.outputDir, arguments.script, arguments.includeRuntime); + + noErrors = KotlinToJVMBytecodeCompiler.compileBunchOfSources( + configuration, jar, outputDir, arguments.script, arguments.includeRuntime); } } return noErrors ? OK : COMPILATION_ERROR; diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java index 5de010cc739..fe24d6ea83b 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CompileEnvironmentUtil.java @@ -276,7 +276,7 @@ public class CompileEnvironmentUtil { } } - public static void writeToOutputDirectory(ClassFileFactory factory, final String outputDir) { + public static void writeToOutputDirectory(ClassFileFactory factory, @NotNull File outputDir) { List files = factory.files(); for (String file : files) { File target = new File(outputDir, file); diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java index 8835341d722..1175b7fd3a7 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/KotlinToJVMBytecodeCompiler.java @@ -90,8 +90,8 @@ public class KotlinToJVMBytecodeCompiler { K2JVMCompileEnvironmentConfiguration configuration, @NotNull List modules, @NotNull File directory, - @Nullable String jarPath, - @Nullable String outputDir, + @Nullable File jarPath, + @Nullable File outputDir, boolean jarRuntime) { for (Module moduleBuilder : modules) { @@ -108,7 +108,7 @@ public class KotlinToJVMBytecodeCompiler { CompileEnvironmentUtil.writeToOutputDirectory(moduleFactory, outputDir); } else { - String path = jarPath != null ? jarPath : new File(directory, moduleBuilder.getModuleName() + ".jar").getPath(); + File path = jarPath != null ? jarPath : new File(directory, moduleBuilder.getModuleName() + ".jar"); FileOutputStream outputStream = null; try { outputStream = new FileOutputStream(path); @@ -131,10 +131,10 @@ public class KotlinToJVMBytecodeCompiler { return true; } - private static boolean compileBunchOfSources( + public static boolean compileBunchOfSources( K2JVMCompileEnvironmentConfiguration configuration, - String jar, - String outputDir, + @Nullable File jar, + @Nullable File outputDir, boolean script, boolean includeRuntime ) { @@ -202,7 +202,7 @@ public class KotlinToJVMBytecodeCompiler { public static boolean compileBunchOfSources( K2JVMCompileEnvironmentConfiguration configuration, - List sourceFilesOrDirs, String jar, String outputDir, boolean script, boolean includeRuntime) { + List sourceFilesOrDirs, File jar, File outputDir, boolean script, boolean includeRuntime) { for (String sourceFileOrDir : sourceFilesOrDirs) { configuration.getEnvironment().addSources(sourceFileOrDir); } @@ -213,7 +213,7 @@ public class KotlinToJVMBytecodeCompiler { public static boolean compileBunchOfSourceDirectories( K2JVMCompileEnvironmentConfiguration configuration, - List sources, String jar, String outputDir, boolean script, boolean includeRuntime) { + List sources, File jar, File outputDir, boolean script, boolean includeRuntime) { for (String source : sources) { configuration.getEnvironment().addSources(source); } diff --git a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileJavaAgainstKotlinTest.java b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileJavaAgainstKotlinTest.java index 0027519b451..fd39c244798 100644 --- a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileJavaAgainstKotlinTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileJavaAgainstKotlinTest.java @@ -78,7 +78,7 @@ public class CompileJavaAgainstKotlinTest extends TestCaseWithTmpdir { ClassFileFactory classFileFactory = GenerationUtils.compileFileGetClassFileFactoryForTest(psiFile, CompilerSpecialMode.REGULAR); - CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir.getPath()); + CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir); Disposer.dispose(myTestRootDisposable); diff --git a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileKotlinAgainstKotlinTest.java b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileKotlinAgainstKotlinTest.java index 4ac8fd4ad9c..82e270d5d4a 100644 --- a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileKotlinAgainstKotlinTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/CompileKotlinAgainstKotlinTest.java @@ -92,7 +92,7 @@ public class CompileKotlinAgainstKotlinTest extends TestCaseWithTmpdir { ClassFileFactory classFileFactory = GenerationUtils.compileFileGetClassFileFactoryForTest(psiFile, CompilerSpecialMode.REGULAR); - CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, aDir.getPath()); + CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, aDir); Disposer.dispose(myTestRootDisposable); } @@ -110,7 +110,7 @@ public class CompileKotlinAgainstKotlinTest extends TestCaseWithTmpdir { ClassFileFactory classFileFactory = GenerationUtils.compileFileGetClassFileFactoryForTest(psiFile, CompilerSpecialMode.REGULAR); - CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, bDir.getPath()); + CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, bDir); Disposer.dispose(myTestRootDisposable); } diff --git a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/ReadKotlinBinaryClassTest.java b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/ReadKotlinBinaryClassTest.java index a8db9880dae..8f3a49ff3a2 100644 --- a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/ReadKotlinBinaryClassTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/ReadKotlinBinaryClassTest.java @@ -75,7 +75,7 @@ public class ReadKotlinBinaryClassTest extends TestCaseWithTmpdir { ClassFileFactory classFileFactory = state.getFactory(); - CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir.getPath()); + CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir); NamespaceDescriptor namespaceFromSource = state.getBindingContext().get(BindingContext.FILE_TO_NAMESPACE, psiFile); diff --git a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/WriteSignatureTest.java b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/WriteSignatureTest.java index 870c3db2e36..a162a6d43b9 100644 --- a/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/WriteSignatureTest.java +++ b/compiler/tests/org/jetbrains/jet/cli/jvm/compiler/WriteSignatureTest.java @@ -83,7 +83,7 @@ public class WriteSignatureTest extends TestCaseWithTmpdir { ClassFileFactory classFileFactory = GenerationUtils.compileFileGetClassFileFactoryForTest(psiFile, CompilerSpecialMode.REGULAR); - CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir.getPath()); + CompileEnvironmentUtil.writeToOutputDirectory(classFileFactory, tmpdir); Disposer.dispose(myTestRootDisposable);