@@ -839,38 +839,21 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
839
839
840
840
var hasParent = model .getParentModel () != null ;
841
841
var requiredVarsWithoutDiscriminator = new ArrayList <CodegenProperty >();
842
- for (var v : model .requiredVars ) {
843
- boolean isDiscriminator = false ;
844
- if (hasParent ) {
845
- for (var pv : model .getParentModel ().getAllVars ()) {
846
- if (pv .required && pv .getName ().equals (v .getName ())) {
847
- isDiscriminator = pv .isDiscriminator ;
848
- break ;
849
- }
850
- }
851
- } else {
852
- isDiscriminator = v .isDiscriminator ;
853
- }
854
- if (!isDiscriminator ) {
855
- requiredVarsWithoutDiscriminator .add (v );
856
- }
857
- }
842
+ var requiredParentVarsWithoutDiscriminator = new ArrayList <CodegenProperty >();
858
843
859
- if (hasParent ) {
860
- var parentRequiredVarsWithoutDiscriminator = new ArrayList <CodegenProperty >();
861
- for (var v : model .getParentModel ().vars ) {
862
- if (v .required && !v .isDiscriminator ) {
863
- parentRequiredVarsWithoutDiscriminator .add (v );
864
- }
865
- }
866
- model .vendorExtensions .put ("requiredParentVarsWithoutDiscriminator" , parentRequiredVarsWithoutDiscriminator );
867
- model .parentVars = model .getParentModel ().allVars ;
868
- }
844
+ processParentModel (model , requiredVarsWithoutDiscriminator , requiredParentVarsWithoutDiscriminator );
869
845
870
- List <CodegenProperty > requiredVars = model .vars .stream ().filter (v -> v .required ).collect (Collectors .toList ());
846
+ List <CodegenProperty > requiredVars = model .vars .stream ()
847
+ .filter (v -> v .required )
848
+ .toList ();
871
849
872
850
model .vendorExtensions .put ("withMultipleVars" , model .vars .size () > 1 );
873
- model .vendorExtensions .put ("requiredVarsWithoutDiscriminator" , requiredVarsWithoutDiscriminator );
851
+ if (!requiredParentVarsWithoutDiscriminator .isEmpty ()) {
852
+ model .vendorExtensions .put ("requiredParentVarsWithoutDiscriminator" , requiredParentVarsWithoutDiscriminator );
853
+ }
854
+ if (!requiredVarsWithoutDiscriminator .isEmpty ()) {
855
+ model .vendorExtensions .put ("requiredVarsWithoutDiscriminator" , requiredVarsWithoutDiscriminator );
856
+ }
874
857
model .vendorExtensions .put ("requiredVars" , requiredVars );
875
858
model .vendorExtensions .put ("areRequiredVarsAndReadOnlyVars" , !requiredVarsWithoutDiscriminator .isEmpty () && !model .readOnlyVars .isEmpty ());
876
859
model .vendorExtensions .put ("serialId" , random .nextLong ());
@@ -894,6 +877,75 @@ public Map<String, ModelsMap> postProcessAllModels(Map<String, ModelsMap> objs)
894
877
return objs ;
895
878
}
896
879
880
+ private void processParentModel (CodegenModel model , List <CodegenProperty > requiredVarsWithoutDiscriminator , List <CodegenProperty > requiredParentVarsWithoutDiscriminator ) {
881
+ var parent = model .getParentModel ();
882
+ var hasParent = parent != null ;
883
+
884
+ for (var v : model .requiredVars ) {
885
+ boolean isDiscriminator = isDiscriminator (v , model );
886
+ if (!isDiscriminator (v , model ) && !containsProp (v , requiredVarsWithoutDiscriminator )) {
887
+ requiredVarsWithoutDiscriminator .add (v );
888
+ }
889
+ }
890
+
891
+ requiredParentVarsWithoutDiscriminator (model , requiredParentVarsWithoutDiscriminator );
892
+ if (hasParent ) {
893
+ model .parentVars = parent .allVars ;
894
+ }
895
+ if (hasParent ) {
896
+ processParentModel (parent , requiredVarsWithoutDiscriminator , requiredParentVarsWithoutDiscriminator );
897
+ }
898
+ }
899
+
900
+ private void requiredParentVarsWithoutDiscriminator (CodegenModel model , List <CodegenProperty > requiredParentVarsWithoutDiscriminator ) {
901
+
902
+ var parent = model .parentModel ;
903
+ if (parent == null ) {
904
+ return ;
905
+ }
906
+
907
+ for (var v : parent .vars ) {
908
+ boolean isDiscriminator = isDiscriminator (v , model );
909
+ if (v .required && !isDiscriminator ) {
910
+ v .vendorExtensions .put ("isServerOrNotReadOnly" , !v .isReadOnly || isServer ());
911
+ if (!containsProp (v , requiredParentVarsWithoutDiscriminator )) {
912
+ requiredParentVarsWithoutDiscriminator .add (v );
913
+ }
914
+ }
915
+ }
916
+ }
917
+
918
+ private boolean containsProp (CodegenProperty prop , List <CodegenProperty > props ) {
919
+ for (var p : props ) {
920
+ if (prop .name .equals (p .name )) {
921
+ return true ;
922
+ }
923
+ }
924
+ return false ;
925
+ }
926
+
927
+ private boolean isDiscriminator (CodegenProperty prop , CodegenModel model ) {
928
+ var isDiscriminator = prop .isDiscriminator ;
929
+ if (isDiscriminator ) {
930
+ return true ;
931
+ }
932
+ if (model .parentModel == null ) {
933
+ return false ;
934
+ }
935
+ CodegenProperty parentProp = null ;
936
+ for (var pv : model .parentModel .allVars ) {
937
+ if (pv .required && pv .name .equals (prop .name )) {
938
+ isDiscriminator = pv .isDiscriminator ;
939
+ parentProp = pv ;
940
+ break ;
941
+ }
942
+ }
943
+ if (isDiscriminator ) {
944
+ return true ;
945
+ }
946
+ return parentProp != null && isDiscriminator (parentProp , model .parentModel );
947
+ }
948
+
897
949
@ Override
898
950
public void setParameterExampleValue (CodegenParameter p ) {
899
951
p .vendorExtensions .put ("groovyExample" , getParameterExampleValue (p , true ));
0 commit comments