tests and "fix" for pr148007 - workaround JRockit "goto" bug by generating code closer to that produced by javac when weaving after and after returning. In particular: avoid adding a goto that branches to the next instruction (now replaces that return opcode with a nop instead), and store the return value on the top of the stack in a temp before branching to the after advice dispatch and restore it afterwards.
fixes for 137235 (contributed by Ron): more intelligent logic for determining if a path entry is a jar/zip (don't just rely on suffix, some new .bndl files seem to be becoming popular...)
fixing the versioning problem. Up until now if we found no version in a class we 'assumed' it was the latest (1.5.0) - this is dumb. No version really means it is probably 1.2.0 (as the version was added for 1.2.1). These fixes mean that you can now safely check that version when reading in attributes, confident that checking for 1.5.0 *means* 1.5.0 was used to build it.
Lazy instantiation of thisJoinPoint
Speed-ups of 10-100X are measured even when running a small test case with minimal GC issues.
The actual feature implemented is that thisJoinPoint objects are only created just before calling the method for advice that requires them. To take advantage of this feature you must use an if PCD or some other dynamic test that occurs in the PCD not the advice body to guard the expensive creation of the thisJoinPoint object.
-XlazyTjp flag must be passed to compiler to enable this feature.
If any around advice is present on the joinpoint then lazy instantiation
will be disabled. An Xlint warning will be displayed in this case.
As a related optimization, several helper methods were added to
Factory.makeJP to reduce the code size when thisJoinPoint is used.
These class files are *input* to the weaver test cases.
Can't rely on the ones built as part of the AspectJ build as
the weaver test cases are sensitive to the exact compiler
used (needs to be Eclipse 2.1.1 based).