On Tue, 7 Feb 2023 12:34:50 GMT, Maurizio Cimadamore <mcimadam...@openjdk.org> wrote:
>> `AttributedElement::attributedElementKind` identifies the one kind of the >> attributes holder. >> The "places where an attribute can appear" is available through >> `AttributeMapper::whereApplicable` and matched against >> `AttributedElement::attributedElementKind`. >> We may consider to hide or remove this auxiliary method, as >> `AttributedElement::attributedElementKind` might be computed from the >> ClassfileElement instance type. > > Still, there seems to be a modelling issue here. The property of "where could > this attribute go" is a property of the attribute. Of course, for usability > reason, an AttributedElement might expose a predicate saying "I only accept > attributes of these kinds". But it seems to me as if the API has this > relationship backwards, due to _where_ the Kind interface is being defined. I > think if `Kind` was defined in `AttributeMapper` it would be a tad easier to > understand. And, perhaps, the `attributedElementKind` name should be changed > to something like `applicableAttributeKinds` or something like that. The relation is that each `Attribute` is applicable in N `AttributedElements` and not vice versa. For example `ClassModel::attributedElementKind` returns `CLASS` and for example `Attributes.RUNTIME_INVISIBLE_TYPE_ANNOTATIONS::applicableAttributeKinds` returns `Set.of(CLASS, METHOD, FIELD, CODE_ATTRIBUTE, RECORD_COMPONENT)`, so we know it is applicable. However I'll try to re-visit this part of API if needed at all. ------------- PR: https://git.openjdk.org/jdk/pull/10982