On Thu, 24 Oct 2024 16:31:20 GMT, Jorn Vernee <jver...@openjdk.org> wrote:

>> 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)
>
> test/langtools/tools/javap/8034066/T8034066.java line 37:
> 
>> 35: import java.util.regex.Pattern;
>> 36: 
>> 37: public class T8034066 {
> 
> Please don't continue the old practice of naming tests after their bug ID. It 
> obfuscates which test class does what (both in the source code and in the 
> test logs). Suggestion for name: `TestStackMapDetailsIndent`

How about `CodeWriterIndentTest`? We prefer to use prefix modifiers, and this 
tests the indent for general code writer output.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/21685#discussion_r1815928810

Reply via email to