From 177e8f18cbebb39d239ca9a8ee89c4e9b0f40d24 Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 9 May 2016 11:15:14 +0200 Subject: [PATCH] print attachments when logging exceptions in tests --- .../testFramework/LoggedErrorProcessor.java | 2 ++ .../openapi/diagnostic/DefaultLogger.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/platform/testFramework/src/com/intellij/testFramework/LoggedErrorProcessor.java b/platform/testFramework/src/com/intellij/testFramework/LoggedErrorProcessor.java index 032df5a0c728..e1277576a89f 100644 --- a/platform/testFramework/src/com/intellij/testFramework/LoggedErrorProcessor.java +++ b/platform/testFramework/src/com/intellij/testFramework/LoggedErrorProcessor.java @@ -16,6 +16,7 @@ package com.intellij.testFramework; import com.intellij.openapi.Disposable; +import com.intellij.openapi.diagnostic.DefaultLogger; import com.intellij.openapi.util.Disposer; import org.apache.log4j.Logger; import org.jetbrains.annotations.NotNull; @@ -45,6 +46,7 @@ public class LoggedErrorProcessor { @SuppressWarnings("UseOfSystemOutOrSystemErr") public void processError(String message, Throwable t, String[] details, @NotNull Logger logger) { + message += DefaultLogger.attachmentsToString(t); logger.info(message, t); if (myMirrorToStderr) { diff --git a/platform/util/src/com/intellij/openapi/diagnostic/DefaultLogger.java b/platform/util/src/com/intellij/openapi/diagnostic/DefaultLogger.java index 7fd15a3d206e..16b1360a7cfa 100644 --- a/platform/util/src/com/intellij/openapi/diagnostic/DefaultLogger.java +++ b/platform/util/src/com/intellij/openapi/diagnostic/DefaultLogger.java @@ -15,6 +15,9 @@ */ package com.intellij.openapi.diagnostic; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.ExceptionUtil; +import com.intellij.util.Function; import org.apache.log4j.Level; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -56,6 +59,7 @@ public class DefaultLogger extends Logger { @SuppressWarnings("UseOfSystemOutOrSystemErr") public void error(String message, @Nullable Throwable t, @NotNull String... details) { t = checkException(t); + message += attachmentsToString(t); System.err.println("ERROR: " + message); if (t != null) t.printStackTrace(System.err); if (details.length > 0) { @@ -72,4 +76,22 @@ public class DefaultLogger extends Logger { @Override public void setLevel(Level level) { } + + public static String attachmentsToString(Throwable t) { + //noinspection ThrowableResultOfMethodCallIgnored + Throwable rootCause = ExceptionUtil.getRootCause(t); + if (rootCause instanceof ExceptionWithAttachments) { + return "\nAttachments:" + StringUtil.join(((ExceptionWithAttachments)rootCause).getAttachments(), + new Function() { + @Override + public String fun(Attachment attachment) { + return attachment.getPath() + "\n" + attachment.getDisplayText(); + } + }, + "\n----\n"); + } + return ""; + } + + }