RFR: 8294982: Implementation of Classfile API [v15]

Adam Sotona asotona at openjdk.org
Wed Feb 15 09:53:01 UTC 2023


On Thu, 9 Feb 2023 13:17:30 GMT, Maurizio Cimadamore <mcimadamore at openjdk.org> wrote:

>> Adam Sotona has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   AttributeElement.Kind removal (#48)
>
> src/java.base/share/classes/jdk/internal/classfile/Classfile.java line 66:
> 
>> 64:      * @param <V> the type of the optional value
>> 65:      */
>> 66:     public sealed interface Option<V> permits Options.OptionValue {
> 
> After looking more at the usages of Options it is not clear to me as to why generics are needed. Lookup is always performed using a non-generic Option.Key - so the API code has to be unchecked anyway. In fact, I'm not even sure you need a `value()` method. When looking at usages, Option is mostly something you create when you need to pass it to something else (e.g. a constant pool, etc.). Since the client has created the option, it is not clear to me that the client has a need to access the option value (which the API implementation can access internally by other means).

You are right, I've tried to remove generics from `Option` and `Option::value` method and it didn't have any impact on any use case we have.
All access to the `Option` value is done through `ClassReader::optionValue` or `ConstantPoolBuilder::optionValue`, there was no use of `Option::value` at all.
I think it is valuable API cleanup, thanks!

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

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



More information about the build-dev mailing list