RFR: 8034066: Incorrect alignment in the "Code" section for "-c -XDdetails" options

Jonathan Lampérth duke at openjdk.org
Thu Oct 24 19:16:41 UTC 2024


This PR includes changes to ensure `Code:` block indentation in `javap`for the `-verbose` case and non `-verbose` case is the same, which currently does not hold.

Current behaviour of `javap` differs with and without `-verbose` in the following way:
**Command**: `javap -c -XDdetails:stackMaps A.class`

Without `-verbose`


...
  public void a();
    Code:
       0: iconst_0
       1: istore_1
    StackMap locals:  this int
    StackMap stack:
...


With `-verbose`


...
  public void a();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
         0: iconst_0
         1: istore_1
      StackMap locals:  this int
      StackMap stack:
...


With `-verbose` all contents of the `Code:` section include an extra (2 space) indent, which is missing in the non `-verbose` case. This is because the `CodeWriter` is called via `CoderWriter.write(...)` in the `-verbose` case, which wraps the `Code:` block in `indent(+1);...indent(-1)`.

In the non-verbose case this call is circumvented and a simplified version of `CoderWriter.write(...)` is included directly in `ClassWriter.writeMethod`.

---

Alternatively to keep the logic within `CodeWriter` with the goal of keeping the logic for `-verbose` and non `-verbose` in the same place one could add `CodeWriter.writeSimple(...)`.


void writeSimple(CodeAttribute attr) {
        println("Code:");
        indent(+1);
        writeInstrs(attr);
        writeExceptionTable(attr);
        indent(-1);
    }


---

Note: Test setup is inspired by existing tests: [T6622232.java](https://github.com/openjdk/jdk/blob/master/test/langtools/tools/javap/T6622232.java) and [8244573](https://github.com/openjdk/jdk/blob/master/test/langtools/tools/javap/8244573)

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

Commit messages:
 - 8034066: fix indentation in javap Code section details

Changes: https://git.openjdk.org/jdk/pull/21685/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21685&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8034066
  Stats: 245 lines in 3 files changed: 245 ins; 0 del; 0 mod
  Patch: https://git.openjdk.org/jdk/pull/21685.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21685/head:pull/21685

PR: https://git.openjdk.org/jdk/pull/21685


More information about the compiler-dev mailing list