@@ -527,7 +527,19 @@ else if (gName.length() == 1) {
527527 }
528528 }
529529 else {
530- param .setSelfReferenceLoop (true );
530+ // Check configuration for self-reference in collections
531+ if (projectBuilder .getApiConfig ().isAllowSelfReference ()) {
532+ // Allow limited recursion when enabled
533+ if (level < 2 ) {
534+ paramList .addAll (buildParams (gName , preBuilder .toString (), nextLevel , isRequired ,
535+ isResp , registryClasses , projectBuilder , groupClasses ,
536+ methodJsonViewClasses , fieldPid , jsonRequest , atomicInteger ));
537+ }
538+ }
539+ else {
540+ // Original behavior: set self reference loop
541+ param .setSelfReferenceLoop (true );
542+ }
531543 }
532544 }
533545
@@ -624,18 +636,32 @@ else if (gicName.contains("<")) {
624636 }
625637 }
626638 else if (simpleName .equals (subTypeName )) {
627- // reference self
628- ApiParam param1 = ApiParam .of ()
629- .setField (pre + fieldName )
630- .setPid (pid )
631- .setId (atomicOrDefault (atomicInteger , paramList .size () + pid + 1 ))
632- .setClassName (subTypeName )
633- .setMaxLength (maxLength )
634- .setType (ParamTypeConstants .PARAM_TYPE_OBJECT )
635- .setDesc (comment .append (" $ref... self" ).toString ())
636- .setVersion (DocGlobalConstants .DEFAULT_VERSION )
637- .setExtensions (extensionParams );
638- paramList .add (param1 );
639+ // reference self - check configuration
640+ if (projectBuilder .getApiConfig ().isAllowSelfReference ()) {
641+ // Allow limited recursion when enabled
642+ processApiParam (paramList , param , isRequired , comment + appendComment , since , strRequired );
643+ fieldPid = Optional .ofNullable (atomicInteger ).isPresent () ? param .getId ()
644+ : paramList .size () + pid ;
645+ if (level < 2 ) {
646+ paramList .addAll (buildParams (fieldGicName , preBuilder .toString (), nextLevel , isRequired ,
647+ isResp , registryClasses , projectBuilder , groupClasses , methodJsonViewClasses ,
648+ fieldPid , jsonRequest , atomicInteger ));
649+ }
650+ }
651+ else {
652+ // Original behavior: create reference parameter
653+ ApiParam param1 = ApiParam .of ()
654+ .setField (pre + fieldName )
655+ .setPid (pid )
656+ .setId (atomicOrDefault (atomicInteger , paramList .size () + pid + 1 ))
657+ .setClassName (subTypeName )
658+ .setMaxLength (maxLength )
659+ .setType (ParamTypeConstants .PARAM_TYPE_OBJECT )
660+ .setDesc (comment .append (" $ref... self" ).toString ())
661+ .setVersion (DocGlobalConstants .DEFAULT_VERSION )
662+ .setExtensions (extensionParams );
663+ paramList .add (param1 );
664+ }
639665 }
640666 else {
641667 processApiParam (paramList , param , isRequired , comment + appendComment , since , strRequired );
0 commit comments