Print a root tag in the XML output mode
Now, the compiler output in the "-tags" mode is enclosed into <MESSAGES>...</MESSAGES>
This commit is contained in:
@@ -77,7 +77,8 @@ public class KotlinCompiler {
|
|||||||
System.err.println("exec() finished with " + rc + " return code");
|
System.err.println("exec() finished with " + rc + " return code");
|
||||||
System.exit(rc.getCode());
|
System.exit(rc.getCode());
|
||||||
}
|
}
|
||||||
} catch (CompileEnvironmentException e) {
|
}
|
||||||
|
catch (CompileEnvironmentException e) {
|
||||||
System.err.println(e.getMessage());
|
System.err.println(e.getMessage());
|
||||||
System.exit(INTERNAL_ERROR.getCode());
|
System.exit(INTERNAL_ERROR.getCode());
|
||||||
}
|
}
|
||||||
@@ -103,73 +104,82 @@ public class KotlinCompiler {
|
|||||||
|
|
||||||
final MessageRenderer messageRenderer = arguments.tags ? MessageRenderer.TAGS : MessageRenderer.PLAIN;
|
final MessageRenderer messageRenderer = arguments.tags ? MessageRenderer.TAGS : MessageRenderer.PLAIN;
|
||||||
|
|
||||||
if (arguments.version) {
|
errStream.print(messageRenderer.renderPreamble());
|
||||||
errStream.println(messageRenderer.render(CompilerMessageSeverity.INFO, "Kotlin Compiler version " + CompilerVersion.VERSION, CompilerMessageLocation.NO_LOCATION));
|
|
||||||
}
|
|
||||||
|
|
||||||
CompilerSpecialMode mode = parseCompilerSpecialMode(arguments);
|
|
||||||
|
|
||||||
File jdkHeadersJar;
|
|
||||||
if (mode.includeJdkHeaders()) {
|
|
||||||
if (arguments.jdkHeaders != null) {
|
|
||||||
jdkHeadersJar = new File(arguments.jdkHeaders);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
jdkHeadersJar = PathUtil.getAltHeadersPath();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
jdkHeadersJar = null;
|
|
||||||
}
|
|
||||||
File runtimeJar;
|
|
||||||
|
|
||||||
if (mode.includeKotlinRuntime()) {
|
|
||||||
if (arguments.stdlib != null) {
|
|
||||||
runtimeJar = new File(arguments.stdlib);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
runtimeJar = PathUtil.getDefaultRuntimePath();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
runtimeJar = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
CompilerDependencies dependencies = new CompilerDependencies(mode, jdkHeadersJar, runtimeJar);
|
|
||||||
PrintingMessageCollector messageCollector = new PrintingMessageCollector(errStream, messageRenderer, arguments.verbose);
|
|
||||||
Disposable rootDisposable = CompileEnvironmentUtil.createMockDisposable();
|
|
||||||
|
|
||||||
JetCoreEnvironment environment = new JetCoreEnvironment(rootDisposable, dependencies);
|
|
||||||
CompileEnvironmentConfiguration configuration = new CompileEnvironmentConfiguration(environment, dependencies, messageCollector);
|
|
||||||
try {
|
try {
|
||||||
configureEnvironment(configuration, arguments);
|
if (arguments.version) {
|
||||||
|
errStream.println(messageRenderer.render(CompilerMessageSeverity.INFO, "Kotlin Compiler version " + CompilerVersion.VERSION, CompilerMessageLocation.NO_LOCATION));
|
||||||
boolean noErrors;
|
|
||||||
if (arguments.module != null) {
|
|
||||||
noErrors = KotlinToJVMBytecodeCompiler.compileModuleScript(configuration,
|
|
||||||
arguments.module, arguments.jar, arguments.outputDir,
|
|
||||||
arguments.includeRuntime);
|
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// TODO ideally we'd unify to just having a single field that supports multiple files/dirs
|
CompilerSpecialMode mode = parseCompilerSpecialMode(arguments);
|
||||||
if (arguments.getSourceDirs() != null) {
|
|
||||||
noErrors = KotlinToJVMBytecodeCompiler.compileBunchOfSourceDirectories(configuration,
|
File jdkHeadersJar;
|
||||||
arguments.getSourceDirs(), arguments.jar, arguments.outputDir, arguments.includeRuntime);
|
if (mode.includeJdkHeaders()) {
|
||||||
|
if (arguments.jdkHeaders != null) {
|
||||||
|
jdkHeadersJar = new File(arguments.jdkHeaders);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
noErrors = KotlinToJVMBytecodeCompiler.compileBunchOfSources(configuration,
|
jdkHeadersJar = PathUtil.getAltHeadersPath();
|
||||||
arguments.src, arguments.jar, arguments.outputDir, arguments.includeRuntime);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return noErrors ? OK : COMPILATION_ERROR;
|
else {
|
||||||
}
|
jdkHeadersJar = null;
|
||||||
catch (Throwable t) {
|
}
|
||||||
errStream.println(messageRenderer.renderException(t));
|
File runtimeJar;
|
||||||
return INTERNAL_ERROR;
|
|
||||||
|
if (mode.includeKotlinRuntime()) {
|
||||||
|
if (arguments.stdlib != null) {
|
||||||
|
runtimeJar = new File(arguments.stdlib);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
runtimeJar = PathUtil.getDefaultRuntimePath();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
runtimeJar = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
CompilerDependencies dependencies = new CompilerDependencies(mode, jdkHeadersJar, runtimeJar);
|
||||||
|
PrintingMessageCollector messageCollector = new PrintingMessageCollector(errStream, messageRenderer, arguments.verbose);
|
||||||
|
Disposable rootDisposable = CompileEnvironmentUtil.createMockDisposable();
|
||||||
|
|
||||||
|
JetCoreEnvironment environment = new JetCoreEnvironment(rootDisposable, dependencies);
|
||||||
|
CompileEnvironmentConfiguration configuration = new CompileEnvironmentConfiguration(environment, dependencies, messageCollector);
|
||||||
|
|
||||||
|
configuration.getMessageCollector().report(CompilerMessageSeverity.LOGGING, "Configuring the compilation environment", CompilerMessageLocation.NO_LOCATION);
|
||||||
|
try {
|
||||||
|
configureEnvironment(configuration, arguments);
|
||||||
|
|
||||||
|
boolean noErrors;
|
||||||
|
if (arguments.module != null) {
|
||||||
|
noErrors = KotlinToJVMBytecodeCompiler.compileModuleScript(configuration,
|
||||||
|
arguments.module, arguments.jar, arguments.outputDir,
|
||||||
|
arguments.includeRuntime);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// TODO ideally we'd unify to just having a single field that supports multiple files/dirs
|
||||||
|
if (arguments.getSourceDirs() != null) {
|
||||||
|
noErrors = KotlinToJVMBytecodeCompiler.compileBunchOfSourceDirectories(configuration,
|
||||||
|
arguments.getSourceDirs(), arguments.jar, arguments.outputDir, arguments.includeRuntime);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
noErrors = KotlinToJVMBytecodeCompiler.compileBunchOfSources(configuration,
|
||||||
|
arguments.src, arguments.jar, arguments.outputDir, arguments.includeRuntime);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return noErrors ? OK : COMPILATION_ERROR;
|
||||||
|
}
|
||||||
|
catch (Throwable t) {
|
||||||
|
errStream.println(messageRenderer.renderException(t));
|
||||||
|
return INTERNAL_ERROR;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
Disposer.dispose(rootDisposable);
|
||||||
|
messageCollector.printToErrStream();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
Disposer.dispose(rootDisposable);
|
errStream.print(messageRenderer.renderConclusion());
|
||||||
messageCollector.printToErrStream();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,11 @@ import java.io.StringWriter;
|
|||||||
public interface MessageRenderer {
|
public interface MessageRenderer {
|
||||||
|
|
||||||
MessageRenderer TAGS = new MessageRenderer() {
|
MessageRenderer TAGS = new MessageRenderer() {
|
||||||
|
@Override
|
||||||
|
public String renderPreamble() {
|
||||||
|
return "<MESSAGES>";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location) {
|
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location) {
|
||||||
StringBuilder out = new StringBuilder();
|
StringBuilder out = new StringBuilder();
|
||||||
@@ -48,9 +53,19 @@ public interface MessageRenderer {
|
|||||||
public String renderException(@NotNull Throwable e) {
|
public String renderException(@NotNull Throwable e) {
|
||||||
return render(CompilerMessageSeverity.EXCEPTION, PLAIN.renderException(e), CompilerMessageLocation.NO_LOCATION);
|
return render(CompilerMessageSeverity.EXCEPTION, PLAIN.renderException(e), CompilerMessageLocation.NO_LOCATION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String renderConclusion() {
|
||||||
|
return "</MESSAGES>";
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
MessageRenderer PLAIN = new MessageRenderer() {
|
MessageRenderer PLAIN = new MessageRenderer() {
|
||||||
|
@Override
|
||||||
|
public String renderPreamble() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location) {
|
public String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location) {
|
||||||
String path = location.getPath();
|
String path = location.getPath();
|
||||||
@@ -65,8 +80,15 @@ public interface MessageRenderer {
|
|||||||
e.printStackTrace(new PrintWriter(out));
|
e.printStackTrace(new PrintWriter(out));
|
||||||
return out.toString();
|
return out.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String renderConclusion() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
String renderPreamble();
|
||||||
String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location);
|
String render(@NotNull CompilerMessageSeverity severity, @NotNull String message, @NotNull CompilerMessageLocation location);
|
||||||
String renderException(@NotNull Throwable e);
|
String renderException(@NotNull Throwable e);
|
||||||
|
String renderConclusion();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user