Description
ModifiableMetadata selects the appropriate collection type for a given element type by invoking the protected collectionType(Class) method. Current implementation returns only List.class or Set.class. Consequently HashSet is used for all Enum and CodeList collections.
The EnumSet and CodeListSet are more efficient (more compact and presumed faster) implementations of Set for enumerations and code lists, so they should be used. Note that since EnumSet is mutable, we will need to clone it before to return such set from a unmodifiable metadata.
We could also move collectionType(Class) method from ModifiableMetadata to StandardMetadata instead, in order to control the collection type policy in a single place instead than for each metadata object.