The 21 iteration of the FFM API used to contain a method, namely `ValueLayout::arrayElementVarHandle`. This var handle factory was useful when accessing elements in a flat array of variable size.
In 22, this method has been removed because: * It was not general enough (it only worked with value layouts) * A more useful/general version could be obtained with the following code: MethodHandles.collectCoordinates(varHandle(elements), 1, scaleHandle()); Given that accessing variable-length array is rather common, and given that combining var handles is perceived as hard, we noticed that developers often tried to workaround by creating a sequence layout of maximal size, and then deriving a var handle from it. This feels suboptimal (as a new layout is created just so that we can select from it, and using this layout for anything else will likely lead to exceptions, because of its size). For these reasons, we would like to expose this functionality as a new method in the `MemoryLayout` interface, namely `MemoryLayout::arrayElementVarHandle`. This method generalizes the old method in the 21 API, and is implemented in the obvious way, using a combinator (see above). This PR also adds a lot of narrative text to describe how to deal with variable-length arrays, which should clarify the role of the new method. ------------- Commit messages: - Inital push Changes: https://git.openjdk.org/jdk/pull/16272/files Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=16272&range=00 Issue: https://bugs.openjdk.org/browse/JDK-8318538 Stats: 163 lines in 6 files changed: 119 ins; 20 del; 24 mod Patch: https://git.openjdk.org/jdk/pull/16272.diff Fetch: git fetch https://git.openjdk.org/jdk.git pull/16272/head:pull/16272 PR: https://git.openjdk.org/jdk/pull/16272