RFR: 8035271: Incorrect indentation of LineNumberTable/LocalVariableTable/Exception table/LocalVariableTypeTable/StackMapTable/RuntimeVisibleTypeAnnotations in verbose mode [v2]
Jonathan Lampérth
duke at openjdk.org
Wed Nov 27 23:38:46 UTC 2024
On Tue, 26 Nov 2024 08:57:04 GMT, Jonathan Lampérth <duke at openjdk.org> wrote:
>> 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
>> ...
>
> Jonathan Lampérth has updated the pull request incrementally with one additional commit since the last revision:
>
> feat: add Code: header for LNT and LVT
I have additionally created https://bugs.openjdk.org/browse/JDK-8345145 to further pursue the `-l` without `-c` case, with the idea of not outputting any code attributes when neither `-c` nor `-v` is specified.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/22359#issuecomment-2504979528
More information about the core-libs-dev
mailing list