Hi Staffan, Looks good.
Though I do wonder how the matching logic works such that the superclass is considered. I suppose it is a "feature" to match on X and all subclasses of X, but probably should be a way to match on exactly X not subclasses. Anyway just idle thoughts. :)
Thanks, David On 16/08/2016 4:15 AM, Staffan Larsen wrote:
All, Please review this fix for a test that starting failing after recent changes to java.lang.invoke. The test instructs jdb to break on all exceptions matching "java.lang.I*" (that's a capital 'i'). The semantics of that operation actually means "break on all exceptions which have a class name or superclass name matching this string". Some of the recent changes in java.lang.invoke now causes the code to throw numerous java.lang.NoSuchMethodErrors. This is a subclass of java.lang.IncompatibleClassChangeError, which matches "java.lang.I*". The net result is that jdb will break on a lot more places (all the NoSuchMethodError exceptions) than the test expects and the test fails. We can work around this in the test by changing this line: cmd catch all java.lang.I* to the following two lines: cmd catch all java.lang.Il* cmd catch all java.lang.Ind* This will still match the exception types the test is looking for (IllegalArgumentException, IllegalMonitorStateException, and IndexOutOfBoundsException), but it will not match IncompatibleClassChangeError. Thanks, /Staffan diff --git a/test/com/sun/jdi/CatchPatternTest.sh b/test/com/sun/jdi/CatchPatternTest.sh --- a/test/com/sun/jdi/CatchPatternTest.sh +++ b/test/com/sun/jdi/CatchPatternTest.sh @@ -87,7 +87,12 @@ cmd stop in ${classname}.partTwo runToBkpt cmd ignore uncaught java.lang.Throwable - cmd catch all java.lang.I* + # Instead of matching java.lang.I* we use two more specific + # patterns here. The reason is to avoid matching IncompatibleClassChangeError + # (or the subclass NoSuchMethodError) thrown by the + # java.lang.invoke infrastructure. + cmd catch all java.lang.Il* + cmd catch all java.lang.Ind* cmd cont cmd cont cmd cont