[
https://jira.jboss.org/browse/JASSIST-132?page=com.atlassian.jira.plugin....
]
Shigeru Chiba commented on JASSIST-132:
---------------------------------------
Let me explain why a try-catch statement cannot substitute an expression.
While computing an expression, intermediate results are saved on a stack.
Then, if an exception is thrown, the JVM discards all the values on the stack.
To come back from a catch clause, the broken stack must be restored but it
is really difficult since the stack height (and the values there) is different
depending on when the exception is thrown.
A possible approach is this.
If the code is:
Utils.addStringError("s1", "s2")
it should be transformed into:
Utils.addStringErrorTrap("s1", "s2")
:
private void addStringErrorTrap(String s1, String s2) {
printf("Arguments: %s, %s\n", "s1", "s2");
try {
String s = Utils.addStringError("s1", "s2")
printf("Result: %s\n", s);
}
catch (Throwable t) {
printf("Error: %s\n", t.getMessage());
}
}
A tip is to make a new method addStringErrorTrap.
An exception does not discard stack values used by other methods.
Replacing an expression with a try-catch statement
--------------------------------------------------
Key: JASSIST-132
URL:
https://jira.jboss.org/browse/JASSIST-132
Project: Javassist
Issue Type: Bug
Affects Versions: 3.13.0.GA
Environment: JDK 1.6.0_18
Reporter: Thomas Mauch
Assignee: Shigeru Chiba
Fix For: 3.14.0.GA
Attachments: bug.zip
Instrumenting fails with ArrayIndexOutOfBoundsException.
I will upload a test case showing the issue.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira