On Tue, 8 Mar 2022 14:02:39 GMT, Jim Laskey <jlas...@openjdk.org> wrote:

> We propose to provide a runtime anonymous carrier class object generator; 
> java.lang.runtime.Carrier. This generator class is designed to share 
> anonymous classes when shapes are similar. For example, if several clients 
> require objects containing two integer fields, then Carrier will ensure that 
> each client generates carrier objects using the same underlying anonymous 
> class. 
> 
> See JBS for details.

Looks good.
I've left some minor doc-related comments.
When reading (as discussed online) I wondered if using Unsafe to access values 
inside a byte[] or Object[] would simplify the carrier implementation somehow.

src/java.base/share/classes/java/lang/runtime/Carrier.java line 48:

> 46: 
> 47: /**
> 48:  * This  class is used to create objects that have number and types of

The class javadoc seems a bit on the thin side. I would say something on the 
fact that the shape of the carrier is determined by a MethodType, etc, and add 
an example to illustrate basic usage.

src/java.base/share/classes/java/lang/runtime/Carrier.java line 129:

> 127: 
> 128:     /**
> 129:      * Factory for array based carrier. Array wrapped in object to 
> provide

I found this comment hard to parse - or unhelpful to understand how the factory 
really worked. IIUC, this factory captures all parameters into an Object[] 
(using a collector MH) and returns that Object[] (which acts as the carrier 
object). I'm not sure I see anything here that would prevent the user from 
building a carrier and casting to Object[] ?

src/java.base/share/classes/java/lang/runtime/Carrier.java line 432:

> 430:          * Construct a new object carrier class based on shape.
> 431:          *
> 432:          * @param carrierShape  shape of carrier

Suggestion:

         * @param carrierShape shape of carrier

src/java.base/share/classes/java/lang/runtime/Carrier.java line 633:

> 631:          * getter.
> 632:          *
> 633:          * @param i  index of component to get

Suggestion:

         * @param i index of component to get

src/java.base/share/classes/java/lang/runtime/Carrier.java line 656:

> 654: 
> 655:     /**
> 656:      * Find or create carrier class for a carrioer shape.

Suggestion:

     * Find or create carrier class for a carrier shape.

src/java.base/share/classes/java/lang/runtime/Carrier.java line 852:

> 850:      * @throws IllegalArgumentException if number of component slots 
> exceeds maximum
> 851:      */
> 852:     public static MethodHandle constructor(MethodType methodType) {

What happens to the methodType return type? (both here and in the components 
method). Should javadoc say anything?

-------------

Marked as reviewed by mcimadamore (Reviewer).

PR: https://git.openjdk.java.net/jdk/pull/7744

Reply via email to