RFR: 8294982: Implementation of Classfile API [v12]

Maurizio Cimadamore mcimadamore at openjdk.org
Tue Feb 7 12:13:51 UTC 2023


On Mon, 6 Feb 2023 14:32:12 GMT, Adam Sotona <asotona at openjdk.org> wrote:

>> src/java.base/share/classes/jdk/internal/classfile/ClassSignature.java line 34:
>> 
>>> 32:  * Models the generic signature of a class file, as defined by JVMS 4.7.9.
>>> 33:  */
>>> 34: public sealed interface ClassSignature
>> 
>> It is a bit odd to have Signature and XYZSignature in the API with the latter not extending the former. I think I get what the API is aiming for though - e.g. Signature is for modelling low-level "portions" of the signature attributes, whereas ClassSignature, MethodSignature and friends are there to model the signature attribute attached to a class, method, etc.
>
> The confusion come from simplified name. Signature probably should be called JavaTypeSignature according to the spec. ClassSignature and MethodSignature could not extend it, as it would not respect the reality. Each of them are completely different species. Signature (or JavaTypeSignature) on the other side has many sub-types.

I think you mean `TypeSignature` from JLS 4.3.4 ? If so, I get it. To me it looks as if "Signature" really means "TypeSignature" - then it would make sense as to why `MethodSignature::arguments` returns a `List<Signature>` (e.g. because it should be `List<TypeSignature>`, as in the spec).

Also, from a modelling perspective, I see other problems too - in the JVMS, type signatures are defined as follows:


TypeSignature:
    FieldTypeSignature
    BaseType
```    
And:


FieldTypeSignature:
    ClassTypeSignature
    ArrayTypeSignature
    TypeVariableSignature 


So I'd roughly expect a type with 4 subclasses (type, then class <: type, array <: type, tvar <: type).

But the Signature class currently has other subclasses too - such as `ThrowableSig` - which is really only an (optional) part of method signatures. And, similarly, it also has `TypeParam`, which is a part of method/class signature - but is _not_ a type signature per se.

Summing up, it seems to me that the naming issue (which is not that important) hides a bigger modelling issue.

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

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



More information about the build-dev mailing list