I know how to emit ad-hoc classes - I also know that hidden classes
specifically don't have an entry in the symbol table and can be GC'd,
making them particularly useful for single-function classes - I just don't
know how you'd make a class you don't know the name of a friend/innerclass.

On Mon, Apr 13, 2026, 3:13 AM Remi Forax <[email protected]> wrote:

>
>
> ------------------------------
>
> *From: *"Caleb" <[email protected]>
> *To: *"dev" <[email protected]>
> *Sent: *Sunday, April 12, 2026 10:09:35 PM
> *Subject: *[JVM Question] Making Friends with Ad-Hoc Classes
>
> Hi! This isn't really related to Groovy, but I'm doing weird things with
> the JVM for a compiler plugin and I've hit a knowledge barrier I can't
> pass.  Since you guys are the experts on "doing weird stuff with the JVM",
> I was hoping you might be willing to help?
>
>
> My goal is to copy existing methods, transform them, and link to those
> transformed versions with InvokeDynamic.  Basically the template system
> from C++, but done at runtime.
> I've got all of the groundwork laid to do this, but I'm having trouble
> with access violations in my clones.
>
> Since I'm *cloning* methods, they'll be generated into a class other than
> the one being cloned.  But then since I'm cloning *methods*, they need to
> be able to access PRIVATE MEMBERS of the original instance.
>
> I tried generating public bridge methods, but private types still break
> that.  If possible, I'd like to just make my clone a "friend" of the
> original class like in C++, but I don't know how.
>
> I fully control the classes that clones can be made from, so I can mark
> anything else as an "inner class" or "nestmate" as needed.  I just can't
> figure out what each of those ALLOW on the JVM from the specification docs
> alone.  And you know how helpful google is nowadays; I couldn't find
> anything no matter how I phrased it.
>
> Does anyone know how to do this?
>
>
> The class that encapsulates your clone should be an hidden class (this is
> the mechanism used to load lambda bodies)
>
>
> https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/lang/invoke/MethodHandles.Lookup.html#defineHiddenClass(byte[],boolean,java.lang.invoke.MethodHandles.Lookup.ClassOption..
> .)
>
>
>
> Thank you so much for your help!
>
>
> regards,
> Rémi
>
>

Reply via email to