RFR: 8035271: Incorrect indentation of LineNumberTable/LocalVariableTable/Exception table/LocalVariableTypeTable/StackMapTable/RuntimeVisibleTypeAnnotations in verbose mode

Jonathan Lampérth duke at openjdk.org
Mon Nov 25 13:02:45 UTC 2024


Very similar and related to: https://bugs.openjdk.org/browse/JDK-8034066

This PR includes changes to ensure the indentation of `LineNumberTable` and `LocalVariableTable` behave in the same way both for the `javap -verbose` and `javap -l -c` case. Prior to this PR, for the `javap -l -c` case the `LineNumberTable` and `LocalVariableTable` attributes are not indented with regard to the `Code: ` header.

The only case, where no extra indentation is added is for `javap -l` without `-c` -- As it does not make sense to indent if there is no `Code:` header to indent relative to. I am not sure if there is a use case for `-l` without `-c`, but would leave this functionality as is.

## Current behaviour of javap previously differed with and without -verbose in the following way:

### Case: `javap -l -c EmptyLoop.class`


...
  public void emptyLoop();
    Code:
       0: iconst_0
       ...
      14: return
    LineNumberTable:
      line 3: 0
      line 5: 14
...


### Case: `javap -verbose EmptyLoop.class`


...
  public void emptyLoop();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=1
         0: iconst_0
         ...
        14: return
      LineNumberTable:
        line 3: 0
        line 5: 14
...


## New behaviour:
### Case: `javap -l -c EmptyLoop.class`

...
  public void emptyLoop();
    Code:
         0: iconst_0
         ...
        14: return
      LineNumberTable:
        line 3: 0
        line 5: 14
...



## Open Questions
### Add code header for only `-l` case?
Currently for `-l` without `-c` things look as follows:


...
  public void emptyLoop();
    LineNumberTable:
      line 3: 0
      line 5: 14
...


One could also imagine making the output:

...
  public void emptyLoop();
    Code:
      LineNumberTable:
        line 3: 0
        line 5: 14
...

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

Commit messages:
 - fix: Indentation of LineNumberTable and LocalVariableTable in javap output

Changes: https://git.openjdk.org/jdk/pull/22359/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22359&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8035271
  Stats: 179 lines in 3 files changed: 170 ins; 8 del; 1 mod
  Patch: https://git.openjdk.org/jdk/pull/22359.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22359/head:pull/22359

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


More information about the core-libs-dev mailing list