RFR[9]:Fix java/lang/invoke/MethodHandleImpl's use of Unsafe.defineAnonymousClass()
Paul Sandoz
paul.sandoz at oracle.com
Wed May 11 14:52:50 UTC 2016
Hi Shilpi,
What makes me slightly queasy about the constant pool patching of T is it’s quite fragile and it produces a class with a slightly inconsistent state regarding the InnerClasses structures. It’s probably mostly harmless but still bothers me.
One solution is to combine ASM with constant pool patching. Use ASM to generate the class bytes, and query the constant pool in the ClassWriter, then remember the class bytes, the pool size, and index to patch (a cursory glance at ClassWriter suggests this is possible).
But i think Michael raises an important point about simplification using the default package, if that is possible. However, if the default package is to be used ASM is still required to generate class bytes and define the class anonymously within the scope of the host class. Thus in this approach the addition of patching should not add much more complexity and i think would be more in sync with that of the host class.
Paul.
> On 11 May 2016, at 13:24, shilpi.rastogi at oracle.com wrote:
>
> Hi All,
>
> Please review the following-
>
> https://bugs.openjdk.java.net/browse/JDK-8149574
>
> Solution: Changed anonymous class package name with the package name of its host class.
>
> Two approaches to solve this-
> 1. Parse .class and get the class name index form constant pool and patch it with new name
> http://cr.openjdk.java.net/~srastogi/8149574/webrev.05/
>
> 2. Create class with new name (With ASM)
> http://cr.openjdk.java.net/~srastogi/8149574/webrev.06/
>
> Which approach is better?
>
> Thanks,
> Shilpi
>
>
>
More information about the core-libs-dev
mailing list