String (Throwable e) { return new Object() { @Nls final StringBuilder buf = new StringBuilder(); @Nls String collectAllMessages(Throwable e, Set<Throwable> processed) { if (e != null && processed.add(e)) { final String msg = e.getMessage(); if (msg != null && !msg.trim().isEmpty() && buf.indexOf(msg) < 0) { if (buf.length() > 0) { buf.append("\n"); } buf.append(msg); } return collectAllMessages(e.getCause(), processed); } return buf.toString(); } }.collectAllMessages(e, new HashSet<Throwable>()); }