@@ -622,6 +622,8 @@ public List<NamedType> findSubtypes(Annotated a)
622
622
if (t == null ) return null ;
623
623
JsonSubTypes .Type [] types = t .value ();
624
624
625
+ // 02-Aug-2022, tatu: As per [databind#3500], may need to check uniqueness
626
+ // of names
625
627
if (t .failOnRepeatedNames ()) {
626
628
return findSubtypesCheckRepeatedNames (a .getName (), types );
627
629
} else {
@@ -637,28 +639,28 @@ public List<NamedType> findSubtypes(Annotated a)
637
639
}
638
640
}
639
641
642
+ // @since 2.14
640
643
private List <NamedType > findSubtypesCheckRepeatedNames (String annotatedTypeName , JsonSubTypes .Type [] types )
641
644
{
642
645
ArrayList <NamedType > result = new ArrayList <NamedType >(types .length );
643
646
Set <String > seenNames = new HashSet <>();
644
647
for (JsonSubTypes .Type type : types ) {
645
- result .add (new NamedType (type .value (), type .name ()));
646
-
647
- if (!type .name ().isEmpty () && seenNames .contains (type .name ())) {
648
- throw new IllegalArgumentException ("Annotated type [" + annotatedTypeName + "] got repeated subtype name [" + type .name () + "]" );
648
+ final String typeName = type .name ();
649
+ if (!typeName .isEmpty () && seenNames .contains (typeName )) {
650
+ throw new IllegalArgumentException ("Annotated type [" + annotatedTypeName + "] got repeated subtype name [" + typeName + "]" );
649
651
} else {
650
- seenNames .add (type . name () );
652
+ seenNames .add (typeName );
651
653
}
654
+ result .add (new NamedType (type .value (), typeName ));
652
655
653
656
// [databind#2761]: alternative set of names to use
654
- for (String name : type .names ()) {
655
- result .add (new NamedType (type .value (), name ));
656
-
657
- if (!name .isEmpty () && seenNames .contains (name )) {
658
- throw new IllegalArgumentException ("Annotated type [" + annotatedTypeName + "] got repeated subtype name [" + name + "]" );
657
+ for (String altName : type .names ()) {
658
+ if (!altName .isEmpty () && seenNames .contains (altName )) {
659
+ throw new IllegalArgumentException ("Annotated type [" + annotatedTypeName + "] got repeated subtype name [" + altName + "]" );
659
660
} else {
660
- seenNames .add (name );
661
+ seenNames .add (altName );
661
662
}
663
+ result .add (new NamedType (type .value (), altName ));
662
664
}
663
665
}
664
666
0 commit comments