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 bc04bb076d6..88409aaf403 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 @@ -26,6 +26,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.cli.common.CLIConfigurationKeys; import org.jetbrains.jet.cli.common.messages.MessageCollector; +import org.jetbrains.jet.cli.common.messages.MessageRenderer; import org.jetbrains.jet.cli.jvm.JVMConfigurationKeys; import org.jetbrains.jet.codegen.ClassFileFactory; import org.jetbrains.jet.codegen.GeneratedClassLoader; @@ -104,7 +105,8 @@ public class CompileEnvironmentUtil { GenerationState generationState = KotlinToJVMBytecodeCompiler.analyzeAndGenerate(scriptEnvironment, false); if (generationState == null) { - throw new CompileEnvironmentException("Module script " + moduleScriptFile + " analyze failed"); + throw new CompileEnvironmentException("Module script " + moduleScriptFile + " analyze failed:\n" + + loadModuleScriptText(moduleScriptFile)); } List modules = runDefineModules(moduleScriptFile, generationState.getFactory()); @@ -246,4 +248,16 @@ public class CompileEnvironmentUtil { } } } + + // Used for debug output only + private static String loadModuleScriptText(String moduleScriptFile) { + String moduleScriptText; + try { + moduleScriptText = FileUtil.loadFile(new File(moduleScriptFile)); + } + catch (IOException e) { + moduleScriptText = "Can't load module script text:\n" + MessageRenderer.PLAIN.renderException(e); + } + return moduleScriptText; + } } diff --git a/idea/tests/org/jetbrains/jet/plugin/compilerMessages/Message.java b/idea/tests/org/jetbrains/jet/plugin/compilerMessages/Message.java index 665592364d4..e83496fe9f2 100644 --- a/idea/tests/org/jetbrains/jet/plugin/compilerMessages/Message.java +++ b/idea/tests/org/jetbrains/jet/plugin/compilerMessages/Message.java @@ -98,4 +98,9 @@ public final class Message { } Assert.assertEquals(other.message, this.message); } + + @Override + public String toString() { + return category + ": " + message + " at " + line + ":" + column + " in " + url; + } } diff --git a/idea/tests/org/jetbrains/jet/plugin/compilerMessages/MessageChecker.java b/idea/tests/org/jetbrains/jet/plugin/compilerMessages/MessageChecker.java index 99e2ac2a8c8..43803af4f4e 100644 --- a/idea/tests/org/jetbrains/jet/plugin/compilerMessages/MessageChecker.java +++ b/idea/tests/org/jetbrains/jet/plugin/compilerMessages/MessageChecker.java @@ -43,7 +43,16 @@ public final class MessageChecker { public void finish() { if (iterator.hasNext()) { - fail("More message than expected:\n" + iterator.next().message); + StringBuilder builder = messagesToString(iterator); + fail("More messages than expected:\n" + builder.toString()); } } + + private StringBuilder messagesToString(Iterator iterator) { + StringBuilder builder = new StringBuilder(); + while (iterator.hasNext()) { + builder.append(iterator.next()).append("\n\n"); + } + return builder; + } }