RFR: 8335927: Revisit AnnotationConstantValueEntry and AnnotationValue.OfConstant

Adam Sotona asotona at openjdk.org
Fri Aug 2 08:00:32 UTC 2024


On Fri, 2 Aug 2024 00:39:12 GMT, Chen Liang <liach at openjdk.org> wrote:

> 1. Add notes and docs about the difference between resolved constants and constant pool descriptors for annotation constants (e.g. `char` vs `IntegerEntry`)
> 2. Improved value specification to specify their tags.
> 3. Improved value factories to return their specific types instead of `OfConstant`
> 4. Improved value classes to return specific `PoolEntry` subtypes and specific live constant subtypes
> 5. Removed confusing and meaningless `ConstantPoolBuilder.annotationConstantValueEntry`

src/java.base/share/classes/java/lang/classfile/AnnotationValue.java line 90:

> 88:      */
> 89:     @PreviewFeature(feature = PreviewFeature.Feature.CLASSFILE_API)
> 90:     sealed interface OfConstant<C extends AnnotationConstantValueEntry, R extends Comparable<R> & Constable>

I suggest to minimize use of generics in combination with sealed interface trees and pattern matching. It does not give many benefits, it takes out a part of the code readability and adds many unnecessary brackets and questionmarks: 

case AnnotationValue.OfConstant<?, ?> oc ->


`<R extends Comparable<R> & Constable>` at least brings a benefit of types combination. However I still think it does not outweigh the generics use cost. None of the generics parameter is near to orthogonal to the `OfConstant` nor critical for the API to operate.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/20436#discussion_r1701457480


More information about the core-libs-dev mailing list