@@ -656,15 +656,17 @@ private void postProcessPolymorphism(final List<ModelMap> allModels) {
656656 final CodegenComposedSchemas cs = cm .getComposedSchemas ();
657657 if (cs != null ) {
658658 final List <CodegenProperty > csOneOf = cs .getOneOf ();
659+ CodegenDiscriminator discriminator = cm .getDiscriminator ();
660+
659661 if (csOneOf != null ) {
660- processPolymorphismDataType (csOneOf );
662+ processPolymorphismDataType (csOneOf , discriminator );
661663 cs .setOneOf (csOneOf );
662664 cm .setComposedSchemas (cs );
663665 }
664666
665667 final List <CodegenProperty > csAnyOf = cs .getAnyOf ();
666668 if (csAnyOf != null ) {
667- processPolymorphismDataType (csAnyOf );
669+ processPolymorphismDataType (csAnyOf , discriminator );
668670 cs .setAnyOf (csAnyOf );
669671 cm .setComposedSchemas (cs );
670672 }
@@ -721,6 +723,7 @@ private void postProcessPolymorphism(final List<ModelMap> allModels) {
721723
722724 // Attributes based on the model name
723725 property .defaultValue = String .format (Locale .ROOT , "r#\" %s\" #.to_string()" , cm .getSchemaName ());
726+ property .discriminatorValue = getDiscriminatorValue (cm .getClassname (), discriminator );
724727 property .jsonSchema = String .format (Locale .ROOT , "{ \" default\" :\" %s\" ; \" type\" :\" string\" }" , cm .getSchemaName ());
725728
726729 cm .vars .add (property );
@@ -743,6 +746,19 @@ private void postProcessPolymorphism(final List<ModelMap> allModels) {
743746 }
744747 }
745748
749+ private static String getDiscriminatorValue (String modelName , CodegenDiscriminator discriminator ) {
750+ if (discriminator == null || discriminator .getMappedModels () == null ) {
751+ return modelName ;
752+ }
753+ return discriminator
754+ .getMappedModels ()
755+ .stream ()
756+ .filter (m -> m .getModelName ().equals (modelName ) && m .getMappingName () != null )
757+ .map (CodegenDiscriminator .MappedModel ::getMappingName )
758+ .findFirst ()
759+ .orElse (modelName );
760+ }
761+
746762 private static boolean discriminating (final List <CodegenDiscriminator > discriminatorsForModel , final CodegenModel cm ) {
747763 resetDiscriminatorProperty (cm );
748764
@@ -773,7 +789,7 @@ private static void resetDiscriminatorProperty(final CodegenModel cm) {
773789 }
774790 }
775791
776- private static void processPolymorphismDataType (final List <CodegenProperty > cp ) {
792+ private static void processPolymorphismDataType (final List <CodegenProperty > cp , CodegenDiscriminator discriminator ) {
777793 final HashSet <String > dedupDataTypeWithEnum = new HashSet <>();
778794 final HashMap <String , Integer > dedupDataType = new HashMap <>();
779795
@@ -783,6 +799,7 @@ private static void processPolymorphismDataType(final List<CodegenProperty> cp)
783799 // Mainly needed for primitive types.
784800 model .datatypeWithEnum = camelize (model .dataType .replaceAll ("(?:\\ w+::)+(\\ w+)" , "$1" )
785801 .replace ("<" , "Of" ).replace (">" , "" )).replace (" " , "" ).replace ("," , "" );
802+ model .discriminatorValue = getDiscriminatorValue (model .datatypeWithEnum , discriminator );
786803 if (!dedupDataTypeWithEnum .add (model .datatypeWithEnum )) {
787804 model .datatypeWithEnum += ++idx ;
788805 }
0 commit comments