@@ -485,10 +485,26 @@ private void processParameterAnnotationInMethod(MethodElement element,
485485            paramAnn .stringValue ("name" ).ifPresent (parameter ::name );
486486            paramAnn .enumValue ("in" , ParameterIn .class ).ifPresent (in  -> parameter .in (in .toString ()));
487487            paramAnn .stringValue ("description" ).ifPresent (parameter ::description );
488-             paramAnn .booleanValue ("required" ).ifPresent (parameter ::required );
489-             paramAnn .booleanValue ("deprecated" ).ifPresent (parameter ::deprecated );
490-             paramAnn .booleanValue ("allowEmptyValue" ).ifPresent (parameter ::allowEmptyValue );
491-             paramAnn .booleanValue ("allowReserved" ).ifPresent (parameter ::allowReserved );
488+             paramAnn .booleanValue ("required" ).ifPresent (value  -> {
489+                 if  (value ) {
490+                     parameter .setRequired (true );
491+                 }
492+             });
493+             paramAnn .booleanValue ("deprecated" ).ifPresent (value  -> {
494+                 if  (value ) {
495+                     parameter .setDeprecated (true );
496+                 }
497+             });
498+             paramAnn .booleanValue ("allowEmptyValue" ).ifPresent (value  -> {
499+                 if  (value ) {
500+                     parameter .setAllowEmptyValue (true );
501+                 }
502+             });
503+             paramAnn .booleanValue ("allowReserved" ).ifPresent (value  -> {
504+                 if  (value ) {
505+                     parameter .setAllowReserved (true );
506+                 }
507+             });
492508            paramAnn .stringValue ("example" ).ifPresent (parameter ::example );
493509            paramAnn .stringValue ("ref" ).ifPresent (parameter ::$ref );
494510            paramAnn .enumValue ("style" , ParameterStyle .class ).ifPresent (style  -> parameter .setStyle (paramStyle (style )));
@@ -585,8 +601,8 @@ private void processParameter(VisitorContext context, OpenAPI openAPI,
585601            newParameter .setName (parameter .getName ());
586602        }
587603
588-         if  (newParameter .getRequired () == null ) {
589-             newParameter .setRequired (! parameter . isNullable () && ! parameter . getType (). isOptional () );
604+         if  (newParameter .getRequired () == null  && ! parameter . isNullable () && ! parameter . getType (). isOptional () ) {
605+             newParameter .setRequired (true );
590606        }
591607        if  (javadocDescription  != null  && StringUtils .isEmpty (newParameter .getDescription ())) {
592608            CharSequence  desc  = javadocDescription .getParameters ().get (parameter .getName ());
@@ -598,7 +614,7 @@ private void processParameter(VisitorContext context, OpenAPI openAPI,
598614
599615        Schema  schema  = newParameter .getSchema ();
600616        if  (schema  == null ) {
601-             schema  = resolveSchema (openAPI , parameter , parameterType , context , consumesMediaTypes , null );
617+             schema  = resolveSchema (openAPI , parameter , parameterType , context , consumesMediaTypes , null ,  null );
602618        }
603619
604620        if  (schema  != null ) {
@@ -610,14 +626,11 @@ private void processParameter(VisitorContext context, OpenAPI openAPI,
610626    private  void  processBodyParameter (VisitorContext  context , OpenAPI  openAPI , JavadocDescription  javadocDescription ,
611627                                      MediaType  mediaType , Schema  schema , TypedElement  parameter ) {
612628        Schema  propertySchema  = resolveSchema (openAPI , parameter , parameter .getType (), context ,
613-                 Collections .singletonList (mediaType ), null );
629+                 Collections .singletonList (mediaType ), null ,  null );
614630        if  (propertySchema  != null ) {
615631
616-             Optional <String > description  = parameter .getValue (io .swagger .v3 .oas .annotations .Parameter .class ,
617-                     "description" , String .class );
618-             if  (description .isPresent ()) {
619-                 propertySchema .setDescription (description .get ());
620-             }
632+             Optional <String > description  = parameter .getValue (io .swagger .v3 .oas .annotations .Parameter .class , "description" , String .class );
633+             description .ifPresent (propertySchema ::setDescription );
621634            processSchemaProperty (context , parameter , parameter .getType (), null , schema , propertySchema );
622635            if  (parameter .isNullable () || parameter .getType ().isOptional ()) {
623636                // Keep null if not 
@@ -820,7 +833,7 @@ private void processBody(VisitorContext context, OpenAPI openAPI,
820833                if  (existedMediaType .getExamples () == null ) {
821834                    existedMediaType .setExamples (mediaType .getExamples ());
822835                }
823-                 if  (existedMediaType .getExample () == null ) {
836+                 if  (existedMediaType .getExample () == null  &&  mediaType . getExampleSetFlag () ) {
824837                    existedMediaType .setExample (mediaType .getExample ());
825838                }
826839            }
@@ -980,10 +993,18 @@ private io.swagger.v3.oas.models.Operation readOperation(MethodElement element,
980993                        }
981994                        swaggerParam .setName (paramAnn .name ());
982995                        swaggerParam .setDescription (paramAnn .description ());
983-                         swaggerParam .setRequired (paramAnn .required ());
984-                         swaggerParam .setDeprecated (paramAnn .deprecated ());
985-                         swaggerParam .setAllowEmptyValue (paramAnn .allowEmptyValue ());
986-                         swaggerParam .setAllowReserved (paramAnn .allowReserved ());
996+                         if  (paramAnn .required ()) {
997+                             swaggerParam .setRequired (true );
998+                         }
999+                         if  (paramAnn .deprecated ()) {
1000+                             swaggerParam .setDeprecated (true );
1001+                         }
1002+                         if  (paramAnn .allowEmptyValue ()) {
1003+                             swaggerParam .setAllowEmptyValue (true );
1004+                         }
1005+                         if  (paramAnn .allowReserved ()) {
1006+                             swaggerParam .setAllowReserved (true );
1007+                         }
9871008                        swaggerParam .setExample (paramAnn .example ());
9881009                        swaggerParam .setStyle (paramStyle (paramAnn .style ()));
9891010                        swaggerParam .$ref (paramAnn .ref ());
@@ -1321,7 +1342,8 @@ private void addTagIfNotPresent(String tag, io.swagger.v3.oas.models.Operation s
13211342    private  void  readTags (MethodElement  element , VisitorContext  context , io .swagger .v3 .oas .models .Operation  swaggerOperation , List <io .swagger .v3 .oas .models .tags .Tag > classTags , OpenAPI  openAPI ) {
13221343        element .getAnnotationValuesByType (Tag .class ).forEach (av  -> av .get ("name" , String .class ).ifPresent (swaggerOperation ::addTagsItem ));
13231344
1324-         List <io .swagger .v3 .oas .models .tags .Tag > operationTags  = processOpenApiAnnotation (element , context , Tag .class , io .swagger .v3 .oas .models .tags .Tag .class , openAPI .getTags ());
1345+         List <io .swagger .v3 .oas .models .tags .Tag > copyTags  = openAPI .getTags () != null  ? new  ArrayList <>(openAPI .getTags ()) : null ;
1346+         List <io .swagger .v3 .oas .models .tags .Tag > operationTags  = processOpenApiAnnotation (element , context , Tag .class , io .swagger .v3 .oas .models .tags .Tag .class , copyTags );
13251347        // find not simple tags (tags with description or other information), such fields need to be described at the openAPI level. 
13261348        List <io .swagger .v3 .oas .models .tags .Tag > complexTags  = null ;
13271349        if  (CollectionUtils .isNotEmpty (operationTags )) {
@@ -1338,17 +1360,17 @@ private void readTags(MethodElement element, VisitorContext context, io.swagger.
13381360            if  (CollectionUtils .isEmpty (openAPI .getTags ())) {
13391361                openAPI .setTags (complexTags );
13401362            } else  {
1341-                 for  (io .swagger .v3 .oas .models .tags .Tag  operationTag  : complexTags ) {
1363+                 for  (io .swagger .v3 .oas .models .tags .Tag  complexTag  : complexTags ) {
13421364                    // skip all existed tags 
13431365                    boolean  alreadyExists  = false ;
13441366                    for  (io .swagger .v3 .oas .models .tags .Tag  apiTag  : openAPI .getTags ()) {
1345-                         if  (apiTag .getName ().equals (operationTag .getName ())) {
1367+                         if  (apiTag .getName ().equals (complexTag .getName ())) {
13461368                            alreadyExists  = true ;
13471369                            break ;
13481370                        }
13491371                    }
13501372                    if  (!alreadyExists ) {
1351-                         openAPI .getTags ().add (operationTag );
1373+                         openAPI .getTags ().add (complexTag );
13521374                    }
13531375                }
13541376            }
@@ -1367,14 +1389,16 @@ private List<io.swagger.v3.oas.models.tags.Tag> readTags(ClassElement element, V
13671389    final  List <io .swagger .v3 .oas .models .tags .Tag > readTags (List <AnnotationValue <Tag >> annotations , VisitorContext  context ) {
13681390        return  annotations .stream ()
13691391                .map (av  -> toValue (av .getValues (), context , io .swagger .v3 .oas .models .tags .Tag .class ))
1370-                 .filter (Optional ::isPresent ).map (Optional ::get ).collect (Collectors .toList ());
1392+                 .filter (Optional ::isPresent )
1393+                 .map (Optional ::get )
1394+                 .collect (Collectors .toList ());
13711395    }
13721396
13731397    private  Content  buildContent (Element  definingElement , ClassElement  type , List <MediaType > mediaTypes , OpenAPI  openAPI , VisitorContext  context ) {
13741398        Content  content  = new  Content ();
13751399        mediaTypes .forEach (mediaType  -> {
13761400            io .swagger .v3 .oas .models .media .MediaType  mt  = new  io .swagger .v3 .oas .models .media .MediaType ();
1377-             mt .setSchema (resolveSchema (openAPI , definingElement , type , context , Collections .singletonList (mediaType ), null ));
1401+             mt .setSchema (resolveSchema (openAPI , definingElement , type , context , Collections .singletonList (mediaType ), null ,  null ));
13781402            content .addMediaType (mediaType .toString (), mt );
13791403        });
13801404        return  content ;
0 commit comments