On Tue, 8 Mar 2022 14:02:39 GMT, Jim Laskey <[email protected]> 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