RFR: 8345145: Display javap LineNumberTable and LocalVariableTable iff disassembled code output with `-c` or `-v`

Jonathan Lampérth duke at openjdk.org
Thu Nov 28 11:37:57 UTC 2024


This PR includes a suggested change in behaviour of `javap -l` without `-v` or `-c`.
Previously it was possible to print `LineNumberTable` and `LocalVariableTable` without disassembled code output. This didn't make much sense, as there is no context for this output. This PR proposes to output a warning for this case, as well as not print the `LineNumberTable`and `LocalVariableTable` attrubutes. They are nested attributes of the `CodeAttribute` and thus should only be printed if the `CodeAttribute`  is also printed.

Small changes were also made to existing tests, which seem unproblematic to adjust.

<details>
<summary>Before: `javac -l EmptyLoop`</summary>


Compiled from "EmptyLoop.java"
public class EmptyLoop {
  public EmptyLoop();
    Code:
      LineNumberTable:
        line 1: 0

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


</details>

<details>
<summary>After: `javac -l EmptyLoop`</summary>


Warning: bad combination of options: -l without -c - line number and local variable tables will not be printed
Compiled from "EmptyLoop.java"
public class EmptyLoop {
  public EmptyLoop();

  public void emptyLoop();
}


</details>

Stems from discussion in: https://github.com/openjdk/jdk/pull/22359

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

Commit messages:
 - feat: don't display LNT and LVT without -c/-v with warning

Changes: https://git.openjdk.org/jdk/pull/22434/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=22434&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8345145
  Stats: 118 lines in 8 files changed: 105 ins; 5 del; 8 mod
  Patch: https://git.openjdk.org/jdk/pull/22434.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/22434/head:pull/22434

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


More information about the core-libs-dev mailing list