javap and nullable projection types.

Maurizio Cimadamore maurizio.cimadamore at oracle.com
Tue May 7 10:58:31 UTC 2019


My understanding here is that we'll go down one of the two following paths:

1) extend Signature attribute to model nullable projections; then javap 
can consume this info directly

2) have unambiguous descriptor/value-projection mapping - e.g. LFoo 
always means Foo? - if we want something else (e.g. null-default Foo) we 
use some other descriptor letter

I think with either approaches javap (and javac's classreader) should 
always have enough info to do the inverse reconstruction?

Maurizio


On 21/04/2019 18:42, Srikanth wrote:
> While working on JDK-8222790 (javac diagnostics don't discriminate 
> between inline types and their nullable projection types.) I realized 
> that it is somewhat hard for javap to properly annotate nullable 
> projection types in its text output.
>
> A method in source of the form void foo(X x, X? xq) gets disassembled as
>
> void foo(X, X);
>     descriptor: (QX;LX;)V
>     flags: (0x0000)
>     Code:
>
> Note the parameter types both showing up as X. The descriptor is 
> correct, but the header is misleading.
> In general this looks unsolvable without the now withdrawn ValueTypes 
> attribute in the class file.
>
> This would be a problem for any tool that works only with a "local" 
> view without building an elaborate symbol table of all the classes 
> involved.
>
> Srikanth.


More information about the valhalla-dev mailing list