]
James Perkins commented on LOGTOOL-101:
---------------------------------------
Do you want the stack trace just appended to the created exceptions stack trace? So
something like:
{code:java}
final StackTraceElement[] resultStackTrace = result.getStackTrace();
final StackTraceElement[] causeStackTrace = cause.getStackTrace();
final int newLen = resultStackTrace.length + causeStackTrace.length;
final StackTraceElement[] newStackTrace = Arrays.copyOf(resultStackTrace, newLen);
System.arraycopy(causeStackTrace, 0, newStackTrace, resultStackTrace.length,
causeStackTrace.length);
result.setStackTrace(newStackTrace);
{code}
WRT cloning I'm not sure I get what you mean.
Note I'll also fix the {{@Pos}} documentation as it's rather poor :)
Exception transformation
------------------------
Key: LOGTOOL-101
URL:
https://issues.jboss.org/browse/LOGTOOL-101
Project: Log Tool
Issue Type: Feature Request
Reporter: David Lloyd
Assignee: James Perkins
I'd like to be able to transform an exception message. What this means is, create a
new exception, embed its message in my message, and copy its stack trace to mine.
Something like this:
{code}
@Message(id = 1234, "Binding to %s failed")
IOException bindFailed(SocketAddress bindAddress, @TransformException IOException cause)
{code}
This would yield a message like: "Binding to 1.2.3.4/1234 failed: Address already in
use". Note the addition of the ": " and the source string.
Note that I can almost do this now, except that there's no way to copy the exception
stack:
{code}
@Message(id = 1234, "Binding to %s failed: %s")
IOException bindFailed(SocketAddress bindAddress, IOException cause)
{code}
An alternative approach is to add an annotation for copying the stack trace:
{code}
@Message(id = 1234, "Binding to %s failed")
IOException bindFailed(SocketAddress bindAddress, @CopyStackFrom IOException cause)
{code}
Note that in this case the original exception message is lost. The next variant would
preserve the message:
{code}
@Message(id = 1234, "Binding to %s failed: %s")
IOException bindFailed(SocketAddress bindAddress, IOException cause, @CopyStackFrom
IOException cause2)
{code}
And now to eliminate the duplication:
{code}
@Message(id = 1234, "Binding to %s failed: %s")
IOException bindFailed(SocketAddress bindAddress, @CopyStackFrom @Pos(2) IOException
cause)
{code}
Note that I don't recall if @Pos is 1- or 0-based, so I guessed.