深度测试deepseek如何理解sap Abap 递归代码

第一开始提问分析下面代码

class ZCL_DDIC_TO_JSON definition
  public
  final
  create public .

public section.

  types:
    BEGIN OF ts_s_level,
        level      TYPE i, " ZLEVERL type i fieldtext level
        position   TYPE tabfdpos,
        filedname  TYPE fieldname,
        inttype    TYPE inttype,
        rollname   TYPE rollname,
        ddtext     TYPE ddtext,
        rollnameup TYPE rollname,
      END OF ts_s_level .
  types:
    tt_t_level TYPE TABLE OF ts_s_level .
  types:
    tt_t_rollname TYPE RANGE OF rollname .

  class-data GT_LEVEL type TT_T_LEVEL .

  methods SHOW_ALV
    importing
      !IT_TAB type TT_T_LEVEL .
  class-methods DDIC_TO_JSON
    importing
      !IV_TCHECK type CHAR1 optional
      !IV_OUTPUT type CHAR1 optional
      !IV_DATA type ROLLNAME
      value(IV_FIELDNAME) type FIELDNAME
    returning
      value(EV_JSON) type STRING .
  PROTECTED SECTION.
  PRIVATE SECTION.

    CLASS-METHODS get_table
      IMPORTING
        VALUE(it_rollname) TYPE tt_t_rollname
        VALUE(iv_level)    TYPE int4 .
    CLASS-METHODS convert_to_json
      IMPORTING
        !it_tab        TYPE tt_t_level OPTIONAL
        !is_level      TYPE ts_s_level OPTIONAL
        !iv_data       TYPE rollname OPTIONAL
      CHANGING
        VALUE(iv_json) TYPE string OPTIONAL .
ENDCLASS.



CLASS ZCL_DDIC_TO_JSON IMPLEMENTATION.


* <SIGNATURE>---------------------------------------------------------------------------------------+
* | Static Private Method ZCL_DDIC_TO_JSON=>CONVERT_TO_JSON
* +-------------------------------------------------------------------------------------------------+
* | [--->] IT_TAB                         TYPE        TT_T_LEVEL(optional)
* | [--->] IS_LEVEL                       TYPE        TS_S_LEVEL(optional)
* | [--->] IV_DATA                        TYPE        ROLLNAME(optional)
* | [<-->] IV_JSON                        TYPE        STRING(optional)
* +--------------------------------------------------------------------------------------</SIGNATURE>
  METHOD convert_to_json.
    DATA:ls_level    TYPE ts_s_level,
         lv_lines    TYPE i,
         lv_levelnew TYPE i.
*  Exclude duplicate data at the same level bein
    TYPES: BEGIN OF ts_s_field,
             fieldname TYPE fieldname,
             rollname  TYPE rollname,
           END OF ts_s_field.
    DATA:lt_field TYPE TABLE OF ts_s_field.
*Exclude duplicate data at the same level bein

    IF is_level IS INITIAL.
      DATA(lr_typedescrnew) = cl_abap_typedescr=>describe_by_name( iv_data ) .
      CASE lr_typedescrnew->kind.
        WHEN cl_abap_typedescr=>kind_struct.
          MOVE '{' TO iv_json.
        WHEN cl_abap_typedescr=>kind_table.
          MOVE '[{' TO iv_json.
      ENDCASE.
      LOOP AT it_tab ASSIGNING FIELD-SYMBOL(<ls_level>) WHERE level = 1.
        IF sy-tabix NE 1.
          CONCATENATE iv_json ',' INTO iv_json.
        ENDIF.
        IF <ls_level>-inttype = 'u' OR <ls_level>-inttype = 'h' OR <ls_level>-inttype = 'v'.
          CLEAR:ls_level.
          ls_level = CORRESPONDING #( <ls_level> ).
          CALL METHOD zcl_ddic_to_json=>convert_to_json
            EXPORTING
              is_level = ls_level
            CHANGING
              iv_json  = iv_json.
        ELSE.
          CONCATENATE iv_json '"' <ls_level>-filedname '"' ':' '"' <ls_level>-ddtext '"' INTO iv_json.
        ENDIF.
      ENDLOOP.

      CASE lr_typedescrnew->kind.
        WHEN cl_abap_typedescr=>kind_struct.
          CONCATENATE iv_json '}' INTO iv_json.
        WHEN cl_abap_typedescr=>kind_table.
          CONCATENATE iv_json '}]' INTO iv_json.
      ENDCASE.

    ELSE.

      IF is_level-inttype = 'h'.
        CONCATENATE  iv_json '"' is_level-filedname '"' ':' '[' '{' INTO iv_json.
      ELSEIF is_level-inttype = 'u' OR is_level-inttype = 'v'.
        CONCATENATE  iv_json '"' is_level-filedname '"' ':'  '{' INTO iv_json.
      ENDIF.

      CLEAR:lv_lines.
      CLEAR:lv_levelnew.
      lv_levelnew = is_level-level + 1.
      CLEAR:lt_field.
      LOOP AT gt_level ASSIGNING <ls_level> WHERE rollnameup = is_level-rollname AND
                                                                level      = lv_levelnew.
        APPEND INITIAL LINE TO lt_field ASSIGNING FIELD-SYMBOL(<ls_field>).
        <ls_field>-fieldname