RFR: 7903586: Revisit jextract constant classes

Maurizio Cimadamore mcimadamore at openjdk.org
Wed Nov 29 11:10:59 UTC 2023


This PR removes the use of jextract constant classes, and falls back to a simpler code generation strategies which move the various constants closer to where they belong:

* for structs and callbacks, the constants are added to the class/interface being generated;
* for the header class, we use a local holder class per function to hold the method handle and function descriptor constants.

This scheme results in much less generated code (as no constant class is emitted), but with the same performance and laziness as the old scheme.

When working with the code, I've decided to simplify the handling of constant generation, in the spirit of what was recently done with the introduction of string templates. That is, instead of using a magic `Constant` class, which has methods to generate getters/setters for a given constant, I converted much of the code into "static" string templates, so that it's easier to see which code gets generated when staring at the jextract code. As a result, the `Constant` class has been removed.

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

Commit messages:
 - Drop unused imports
 - Revert build changes
 - Improve indentation code
 - Re-add proper indentation to layouts and descriptors
 - Simplify code further
 - Simplify code
 - Simplify code
 - Initial push

Changes: https://git.openjdk.org/jextract/pull/145/files
 Webrev: https://webrevs.openjdk.org/?repo=jextract&pr=145&range=00
  Issue: https://bugs.openjdk.org/browse/CODETOOLS-7903586
  Stats: 918 lines in 7 files changed: 287 ins; 577 del; 54 mod
  Patch: https://git.openjdk.org/jextract/pull/145.diff
  Fetch: git fetch https://git.openjdk.org/jextract.git pull/145/head:pull/145

PR: https://git.openjdk.org/jextract/pull/145


More information about the jextract-dev mailing list