From 3e3a22a5c92dbda5572e6f78eff5c12b4f5c728b Mon Sep 17 00:00:00 2001 From: pTalanov Date: Fri, 4 May 2012 16:23:31 +0400 Subject: [PATCH] CLI refactoring. Some steps towards nice K2JS cli. --- .../jetbrains/jet/cli/common/CLICompiler.java | 18 +++++--- .../messages/PrintingMessageCollector.java | 11 ++++- .../jetbrains/jet/cli/js/K2JSCompiler.java | 44 +++++++++---------- .../jet/cli/js/K2JSCompilerArguments.java | 4 +- .../jetbrains/jet/cli/jvm/K2JVMCompiler.java | 17 +++---- .../jet/plugin/compiler/K2JSCompiler.java | 13 ++++-- .../src/org/jetbrains/k2js/config/Config.java | 12 +++++ 7 files changed, 72 insertions(+), 47 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/cli/common/CLICompiler.java b/compiler/cli/src/org/jetbrains/jet/cli/common/CLICompiler.java index 88dc62ee16c..0122c3511c3 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/common/CLICompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/common/CLICompiler.java @@ -16,12 +16,13 @@ package org.jetbrains.jet.cli.common; +import com.intellij.openapi.Disposable; +import com.intellij.openapi.util.Disposer; import com.sampullara.cli.Args; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.cli.common.messages.CompilerMessageLocation; -import org.jetbrains.jet.cli.common.messages.CompilerMessageSeverity; -import org.jetbrains.jet.cli.common.messages.MessageRenderer; +import org.jetbrains.jet.cli.common.messages.*; import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentException; +import org.jetbrains.jet.cli.jvm.compiler.CompileEnvironmentUtil; import java.io.PrintStream; import java.util.List; @@ -107,20 +108,25 @@ public abstract class CLICompiler sources = environmentForJS.getSourceFiles(); + final Config config = Config.getEmptyConfig(environmentForJS.getProject()); analyzerWithCompilerReport.analyzeAndReport(new Function0() { @Override public AnalyzeExhaust invoke() { BindingContext context = AnalyzerFacadeForJS - .analyzeFiles(sources, Predicates.alwaysTrue(), new Config(environmentForJS.getProject()) { - @NotNull - @Override - protected List generateLibFiles() { - return Collections.emptyList(); - } - }); + .analyzeFiles(sources, Predicates.alwaysTrue(), config); return AnalyzeExhaust.success(context, JetStandardLibrary.getInstance()); } }, sources); + if (analyzerWithCompilerReport.hasErrors()) { - stream.print(renderer.render(CompilerMessageSeverity.ERROR, "Greeting", NO_LOCATION)); + return ExitCode.COMPILATION_ERROR; + } + + if (arguments.outputDir != null) { + try { + K2JSTranslator.translateWithCallToMainAndSaveToFile(environmentForJS.getSourceFiles(), arguments.outputDir, config, environmentForJS.getProject()); + } + catch (Exception e) { + return ExitCode.INTERNAL_ERROR; + } + } else { + messageCollector.report(CompilerMessageSeverity.ERROR, "Specify output directory via -output", CompilerMessageLocation.NO_LOCATION); + return ExitCode.INTERNAL_ERROR; + } return ExitCode.OK; } } diff --git a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java index 75f0855d864..b73666952c5 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/js/K2JSCompilerArguments.java @@ -26,8 +26,8 @@ public class K2JSCompilerArguments extends CompilerArguments { @Argument(value = "output", description = "Output directory") public String outputDir; - @Argument(value = "module", description = "Module to compile") - public String module; + @Argument(value = "libzip", description = "Path to zipped lib sources") + public String libzip; @Argument(value = "srcdir", description = "Sources directory") public String srcdir; 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 6cf5b743e6a..b7d2a4b8935 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/K2JVMCompiler.java @@ -19,7 +19,6 @@ package org.jetbrains.jet.cli.jvm; import com.google.common.base.Splitter; import com.google.common.collect.Iterables; import com.intellij.openapi.Disposable; -import com.intellij.openapi.util.Disposer; import jet.modules.Module; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.cli.common.CLICompiler; @@ -53,9 +52,7 @@ public class K2JVMCompiler extends CLICompiler modules = CompileEnvironmentUtil - .loadModuleScript(arguments.module, new PrintingMessageCollector(errStream, messageRenderer, false)); + .loadModuleScript(arguments.module, messageCollector); + messageCollector.setVerbose(oldVerbose); File directory = new File(arguments.module).getParentFile(); noErrors = KotlinToJVMBytecodeCompiler.compileModules(configuration, modules, directory, arguments.jar, arguments.outputDir, @@ -132,10 +129,6 @@ public class K2JVMCompiler extends CLICompiler generateLibFiles() { + return Collections.emptyList(); + } + }; + } + @NotNull protected static final List LIB_FILE_NAMES = Arrays.asList( "/core/annotations.kt",