├── .DS_Store ├── JAVA └── zapp.pretty.printer │ ├── bin │ ├── .gitignore │ └── zapp │ │ └── pretty │ │ └── printer │ │ ├── Activator.class │ │ └── handlers │ │ └── AmdpPrettyPrinterHandler.class │ ├── src │ ├── zapp │ │ └── pretty │ │ │ └── printer │ │ │ ├── .gitignore │ │ │ ├── handlers │ │ │ └── .gitignore │ │ │ └── Activator.java │ ├── .classpath │ └── .project │ ├── OSGI-INF │ └── l10n │ │ └── bundle.properties │ ├── .settings │ ├── org.eclipse.wst.ws.service.policy.prefs │ ├── org.eclipse.ltk.core.refactoring.prefs │ └── org.eclipse.jdt.core.prefs │ ├── icons │ ├── amdp pretty printer.png │ └── amdp pretty printer@2x.png │ ├── build.properties │ ├── .classpath │ ├── META-INF │ └── MANIFEST.MF │ ├── .project │ └── plugin.xml ├── abap ├── .DS_Store └── src │ ├── app_pretty_printer_rules │ ├── zif_app_rule_provider.intf.abap │ ├── zif_app_rule_condition.intf.abap │ ├── zif_app_rule_finder.intf.abap │ ├── app_pretty_printer_rules_amdp │ │ ├── zif_app_amdp_rule_definitions.intf.abap │ │ ├── package.devc.xml │ │ ├── zcl_app_rule_amdp_by.clas.xml │ │ ├── zif_app_amdp_rule_definitions.intf.xml │ │ ├── zcl_app_rule_amdp_call.clas.xml │ │ ├── zcl_app_rule_amdp_union_all.clas.xml │ │ ├── zcl_app_rule_amdp_default.clas.xml │ │ ├── zcl_app_rule_amdp_default_tokn.clas.xml │ │ ├── zcl_app_rule_amdp_func_in_1_ro.clas.xml │ │ ├── zcl_app_rule_amdp_control_stru.clas.xml │ │ ├── zcl_app_rule_amdp_default_no_c.clas.xml │ │ ├── zcl_app_rule_amdp_new_line.clas.xml │ │ ├── zcl_app_rule_amdp_sel_ups_ins.clas.xml │ │ ├── zcl_app_rule_amdp_left_right.clas.xml │ │ ├── zcl_app_rule_amdp_new_line_lft.clas.xml │ │ ├── zcl_app_rule_amdp_opn_bracket.clas.xml │ │ ├── zcl_app_rule_cond_n_rl_is_no_b.clas.xml │ │ ├── zcl_app_rule_amdp_clse_bracket.clas.xml │ │ ├── zcl_app_rule_cond_from_tokn_rw.clas.xml │ │ ├── zcl_app_rule_amdp_nl_lft_cond.clas.xml │ │ ├── zcl_app_rule_cond_n_rl_is_no_b.clas.abap │ │ ├── zapp_spec_bracket_logic.doma.xml │ │ ├── zapp_open_bracket_spec_logic.doma.xml │ │ ├── zcl_app_rule_cond_from_tokn_rw.clas.abap │ │ ├── zcl_app_rule_amdp_left_right.clas.abap │ │ ├── zcl_app_rule_amdp_nl_lft_cond.clas.abap │ │ ├── zcl_app_rule_amdp_default_tokn.clas.abap │ │ ├── zcl_app_rule_amdp_func_in_1_ro.clas.abap │ │ ├── zapp_d_spec_bracket_logic.dtel.xml │ │ ├── zcl_app_rule_amdp_new_line_lft.clas.abap │ │ ├── zcl_app_rule_amdp_default_no_c.clas.abap │ │ ├── zcl_app_rule_amdp_new_line.clas.abap │ │ ├── zcl_app_rule_amdp_by.clas.abap │ │ ├── zcl_app_rule_amdp_control_stru.clas.abap │ │ ├── zcl_app_rule_amdp_clse_bracket.clas.abap │ │ ├── zcl_app_rule_amdp_opn_bracket.clas.abap │ │ ├── zcl_app_amdp_rule_utilities.clas.xml │ │ └── zcl_app_rule_amdp_union_all.clas.abap │ ├── package.devc.xml │ ├── app_pretty_printer_rules_abap │ │ ├── package.devc.xml │ │ ├── zcl_app_rule_abap_dummy.clas.xml │ │ └── zcl_app_rule_abap_dummy.clas.abap │ ├── zif_app_rule_provider.intf.xml │ ├── zif_app_rule_finder.intf.xml │ ├── zcl_app_base_rule.clas.xml │ ├── zif_app_rule_condition.intf.xml │ ├── zcl_app_rule_factory.clas.xml │ ├── zcl_app_rule_finder.clas.xml │ ├── zcl_app_rule_provider.clas.xml │ ├── zapp_t_rule_instances.ttyp.xml │ ├── zapp_t_rule_sort.ttyp.xml │ ├── zapp_s_rule_search.tabl.xml │ ├── zcl_app_rule_factory.clas.abap │ └── zcl_app_rule_finder.clas.abap │ ├── package.devc.xml │ ├── zif_app_keyword_scanner.intf.abap │ ├── app_pretty_printer_test │ ├── package.devc.xml │ ├── zcl_app_test_amdp.clas.xml │ ├── zapp_pretty_printer_test_co01.prog.abap │ ├── zapp_pretty_printer_test_so01.prog.abap │ ├── zapp_pretty_printer_test_co01.prog.xml │ ├── zapp_pretty_printer_test_so01.prog.xml │ ├── zapp_pretty_printer_test_ui01.prog.xml │ ├── zapp_pretty_printer_test_ui01.prog.abap │ └── zcl_app_test_amdp.clas.abap │ ├── zapp_token.doma.xml │ ├── zapp_delimiter.doma.xml │ ├── zapp_context.doma.xml │ ├── zapp_rule.doma.xml │ ├── zif_app_keyword_scanner.intf.xml │ ├── zapp_settings_canceli01.prog.abap │ ├── zcl_app_utilities.clas.xml │ ├── zcl_app_settings.clas.xml │ ├── zapp_org_tab_row.doma.xml │ ├── zcl_app_keyword_scanner_amdp.clas.xml │ ├── zcl_app_scanner_comment.clas.xml │ ├── zcl_app_scanner_delimiter.clas.xml │ ├── zcl_app_scanner_sqlscript.clas.xml │ ├── zapp_t_delimiter.ttyp.xml │ ├── zcl_app_adt_rest_pretty_print.clas.xml │ ├── zcl_app_pretty_printer.clas.xml │ ├── zapp_t_token.ttyp.xml │ ├── zapp_settings_canceli01.prog.xml │ ├── zapp_t_rule.ttyp.xml │ ├── zapp_settings_status_0100o01.prog.xml │ ├── zapp_settings_user_command_i01.prog.xml │ ├── zapp_t_rule_result.ttyp.xml │ ├── zapp_t_stokesx_ext.ttyp.xml │ ├── zcx_app_exception.clas.xml │ ├── zapp_settings_user_command_i01.prog.abap │ ├── zapp_settings_status_0100o01.prog.abap │ ├── zcx_app_exception.clas.abap │ ├── zapp_t_keywords_sort.ttyp.xml │ ├── zapp_settings.tran.xml │ ├── zapp_s_keywords.tabl.xml │ ├── zapp_comment.doma.xml │ ├── zcl_app_adt_disc_pretty_print.clas.xml │ ├── zapp_d_token.dtel.xml │ ├── zapp_d_comment.dtel.xml │ ├── zapp_d_keyword.dtel.xml │ ├── zapp_d_delimiter.dtel.xml │ ├── zapp_d_sqlscript.dtel.xml │ ├── zapp_d_rule_class.dtel.xml │ ├── ezapp_settings.enqu.xml │ ├── zapp_sqlscript.doma.xml │ ├── zapp_d_context.dtel.xml │ ├── zapp_d_rule.dtel.xml │ ├── zapp_d_org_tab_row.dtel.xml │ ├── zapp_d_additional_indent.dtel.xml │ ├── zapp_d_rule_cond_class.dtel.xml │ ├── zapp_d_hl_context.dtel.xml │ ├── zapp_d_no_lb_at_comma.dtel.xml │ ├── zapp_d_new_line_req.dtel.xml │ ├── zcl_app_adt_disc_pretty_print.clas.abap │ ├── zapp_d_comment_detail.dtel.xml │ ├── zapp_d_new_line_indent_diff.dtel.xml │ ├── zapp_d_new_statem_indent_diff.dtel.xml │ ├── zapp_comment_detail.doma.xml │ ├── zapp_lb_after_comma_rule.doma.xml │ ├── zcl_app_scanner.clas.xml │ ├── zapp_s_rule_result.tabl.xml │ ├── zcl_app_adt_rest_pretty_print.clas.abap │ ├── zapp_t_stokesx_ext_st.ttyp.xml │ ├── zcl_app_settings.clas.abap │ ├── zif_app_settings.intf.abap │ ├── zif_app_settings.intf.xml │ ├── zapp_settings.tabl.xml │ ├── zapp_s_rule.tabl.xml │ ├── zapp_s_stokesx_ext.tabl.xml │ ├── zcl_app_scanner.clas.testclasses.abap │ ├── zapp_mc_pretty_print.msag.xml │ ├── zcl_app_scanner_delimiter.clas.abap │ └── zapp_settings.prog.abap ├── doc ├── images │ ├── amdp_pretty_printer.gif │ └── amdp_pretty_printer_icon.png ├── Installation │ ├── images │ │ └── media │ │ │ ├── image1.png │ │ │ ├── image2.png │ │ │ ├── image3.png │ │ │ ├── image4.png │ │ │ ├── image5.png │ │ │ ├── image6.png │ │ │ ├── image7.png │ │ │ ├── image8.png │ │ │ ├── image9.png │ │ │ ├── image10.png │ │ │ ├── image11.png │ │ │ └── image12.png │ └── README.md ├── Configuration │ └── images │ │ └── media │ │ ├── image1.png │ │ └── image2.png └── how_does_it_work │ └── README.md ├── Eclipse Dropin └── plugins │ └── zapp.pretty.printer_1.0.1.202210021353.jar ├── .abapgit.xml ├── README.md └── LICENSE /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/.DS_Store -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/bin/.gitignore: -------------------------------------------------------------------------------- 1 | /.classpath 2 | /.project 3 | /zapp/ 4 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/src/zapp/pretty/printer/.gitignore: -------------------------------------------------------------------------------- 1 | /Activator.class 2 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/OSGI-INF/l10n/bundle.properties: -------------------------------------------------------------------------------- 1 | plugin.name=AMDP Pretty Printer -------------------------------------------------------------------------------- /abap/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/abap/.DS_Store -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/src/zapp/pretty/printer/handlers/.gitignore: -------------------------------------------------------------------------------- 1 | /AmdpPrettyPrinterHandler.class 2 | -------------------------------------------------------------------------------- /doc/images/amdp_pretty_printer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/images/amdp_pretty_printer.gif -------------------------------------------------------------------------------- /doc/Installation/images/media/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image1.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image2.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image3.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image4.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image5.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image6.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image7.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image8.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image9.png -------------------------------------------------------------------------------- /doc/images/amdp_pretty_printer_icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/images/amdp_pretty_printer_icon.png -------------------------------------------------------------------------------- /doc/Configuration/images/media/image1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Configuration/images/media/image1.png -------------------------------------------------------------------------------- /doc/Configuration/images/media/image2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Configuration/images/media/image2.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image10.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image11.png -------------------------------------------------------------------------------- /doc/Installation/images/media/image12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/doc/Installation/images/media/image12.png -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/.settings/org.eclipse.wst.ws.service.policy.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.wst.ws.service.policy.projectEnabled=false 3 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/icons/amdp pretty printer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/JAVA/zapp.pretty.printer/icons/amdp pretty printer.png -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/icons/amdp pretty printer@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/JAVA/zapp.pretty.printer/icons/amdp pretty printer@2x.png -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/.settings/org.eclipse.ltk.core.refactoring.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false 3 | -------------------------------------------------------------------------------- /Eclipse Dropin/plugins/zapp.pretty.printer_1.0.1.202210021353.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/Eclipse Dropin/plugins/zapp.pretty.printer_1.0.1.202210021353.jar -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/bin/zapp/pretty/printer/Activator.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/JAVA/zapp.pretty.printer/bin/zapp/pretty/printer/Activator.class -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/build.properties: -------------------------------------------------------------------------------- 1 | source.. = src/ 2 | output.. = bin/ 3 | bin.includes = plugin.xml,\ 4 | META-INF/,\ 5 | .,\ 6 | icons/,\ 7 | OSGI-INF/ 8 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/bin/zapp/pretty/printer/handlers/AmdpPrettyPrinterHandler.class: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/fmabap/AMDP_Pretty_Printer/HEAD/JAVA/zapp.pretty.printer/bin/zapp/pretty/printer/handlers/AmdpPrettyPrinterHandler.class -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zif_app_rule_provider.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_app_rule_provider 2 | PUBLIC . 3 | 4 | METHODS get_rules 5 | RETURNING VALUE(rt_result) TYPE ZAPP_T_RULE_SORT 6 | RAISING zcx_app_exception. 7 | 8 | ENDINTERFACE. 9 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/src/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zif_app_rule_condition.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_app_rule_condition 2 | PUBLIC . 3 | 4 | METHODS is_cond_fulfilled 5 | IMPORTING ir_rule TYPE REF TO zif_app_rule 6 | RETURNING VALUE(rv_result) TYPE abap_bool 7 | RAISING zcx_app_exception. 8 | ENDINTERFACE. 9 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zif_app_rule_finder.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_app_rule_finder 2 | PUBLIC . 3 | 4 | METHODS get_rule_data 5 | IMPORTING is_rule_search type ZAPP_S_RULE_SEARCH 6 | RETURNING VALUE(rr_rule_data) TYPE REF TO zapp_s_rule 7 | RAISING zcx_app_exception. 8 | 9 | ENDINTERFACE. 10 | -------------------------------------------------------------------------------- /.abapgit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | E 6 | /abap/src/ 7 | FULL 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zif_app_amdp_rule_definitions.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_app_amdp_rule_definitions 2 | PUBLIC . 3 | CONSTANTS: BEGIN OF cos_open_bracket_special_logic, 4 | call_statement TYPE ZAPP_D_SPEC_BRACKET_LOGIC value 'C', 5 | END of cos_open_bracket_special_logic. 6 | 7 | 8 | 9 | ENDINTERFACE. 10 | -------------------------------------------------------------------------------- /abap/src/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | AMDP Pretty Printer 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /abap/src/zif_app_keyword_scanner.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_app_keyword_scanner 2 | 3 | PUBLIC . 4 | METHODS scan_keyword 5 | IMPORTING ir_token_ext TYPE REF TO zapp_s_stokesx_ext 6 | RAISING zcx_app_exception. 7 | 8 | METHODS is_keyword 9 | IMPORTING iv_token_up TYPE zapp_d_token 10 | RETURNING VALUE(rv_result) TYPE abap_bool. 11 | ENDINTERFACE. 12 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Pretty Printer Test 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Pretty Printer Rules 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_abap/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Pretty Printer Rules ABAP 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/package.devc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Pretty Printer Rules AMDP 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/src/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | src 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /abap/src/zapp_token.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_TOKEN 7 | E 8 | STRG 9 | X 10 | Token 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /abap/src/zapp_delimiter.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_DELIMITER 7 | E 8 | STRG 9 | X 10 | Delimiter 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /abap/src/zapp_context.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_CONTEXT 7 | E 8 | STRG 9 | X 10 | Pretty Printer Context 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /abap/src/zapp_rule.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_RULE 7 | E 8 | CHAR 9 | 000030 10 | 000030 11 | Pretty Printer Rule 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /abap/src/zif_app_keyword_scanner.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_APP_KEYWORD_SCANNER 7 | E 8 | Keyword Provider 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zif_app_rule_provider.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_APP_RULE_PROVIDER 7 | E 8 | Rule Provider 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /abap/src/zapp_settings_canceli01.prog.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE ZAPP_SETTINGS_CANCELI01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module CANCEL INPUT 6 | *&---------------------------------------------------------------------* 7 | * text 8 | *----------------------------------------------------------------------* 9 | MODULE cancel INPUT. 10 | LEAVE TO SCREEN 0. 11 | ENDMODULE. 12 | -------------------------------------------------------------------------------- /abap/src/zcl_app_utilities.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_UTILITIES 7 | E 8 | Pretty Printer Utilities 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zif_app_rule_finder.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_APP_RULE_FINDER 7 | E 8 | Pretty Printer Rule Finder 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /abap/src/zcl_app_settings.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_SETTINGS 7 | E 8 | AMDP Pretty Printer Settings 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zcl_app_base_rule.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_BASE_RULE 7 | E 8 | Base Rule 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zcl_app_test_amdp.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_TEST_AMDP 7 | E 8 | Test AMDP 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zif_app_rule_condition.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_APP_RULE_CONDITION 7 | E 8 | Pretty Printer Rule Condition 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /abap/src/zapp_org_tab_row.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_ORG_TAB_ROW 7 | E 8 | DEC 9 | 000010 10 | 000013 11 | 000002 12 | Original Tab Row 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zcl_app_rule_factory.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_FACTORY 7 | E 8 | Rule Factory 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zcl_app_keyword_scanner_amdp.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_KEYWORD_SCANNER_AMDP 7 | E 8 | Keyword Provider AMDP 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zcl_app_scanner_comment.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_SCANNER_COMMENT 7 | E 8 | Pretty Printer Scanner Comment 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zcl_app_scanner_delimiter.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_SCANNER_DELIMITER 7 | E 8 | Pretty Printer Scanner Delimiter 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zcl_app_scanner_sqlscript.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_SCANNER_SQLSCRIPT 7 | E 8 | Pretty Printer Scanner SQLSCRIPT 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zcl_app_rule_finder.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_FINDER 7 | E 8 | Pretty Printer Rule Finder 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zapp_t_delimiter.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_DELIMITER 7 | E 8 | STRG 9 | T 10 | D 11 | N 12 | Delemiter 13 | 000008 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zcl_app_rule_provider.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_PROVIDER 7 | E 8 | Pretty Printer Rule Provider 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zcl_app_adt_rest_pretty_print.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_ADT_REST_PRETTY_PRINT 7 | E 8 | Resource Controller Source Formatter 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_by.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_BY 7 | E 8 | AMDP Rule By 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zif_app_amdp_rule_definitions.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_APP_AMDP_RULE_DEFINITIONS 7 | E 8 | AMDP Rule Definitions 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /abap/src/zcl_app_pretty_printer.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_PRETTY_PRINTER 7 | E 8 | Pretty Printer 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_call.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_CALL 7 | E 8 | Rule for Call 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zapp_pretty_printer_test_co01.prog.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE ZAPP_PRETTY_PRINTER_TEST_CO01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module CREATE_OBJECTS OUTPUT 6 | *&---------------------------------------------------------------------* 7 | *& 8 | *&---------------------------------------------------------------------* 9 | MODULE create_objects OUTPUT. 10 | 11 | gr_logic->create_controls( ). 12 | 13 | ENDMODULE. 14 | -------------------------------------------------------------------------------- /abap/src/zapp_t_token.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_TOKEN 7 | E 8 | ZAPP_D_TOKEN 9 | E 10 | STRG 11 | T 12 | D 13 | N 14 | Token 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_abap/zcl_app_rule_abap_dummy.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_ABAP_DUMMY 7 | E 8 | Dummy ABAP Rule 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_union_all.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_UNION_ALL 7 | E 8 | Union ALL 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zapp_pretty_printer_test_so01.prog.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE ZAPP_PRETTY_PRINTER_TEST_SO01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module STATUS_0100 OUTPUT 6 | *&---------------------------------------------------------------------* 7 | *& 8 | *&---------------------------------------------------------------------* 9 | MODULE status_0100 OUTPUT. 10 | SET PF-STATUS '0100'. 11 | SET TITLEBAR '0100'. 12 | ENDMODULE. 13 | -------------------------------------------------------------------------------- /abap/src/zapp_settings_canceli01.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_SETTINGS_CANCELI01 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZAPP_SETTINGS_CANCELI01 15 | 31 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_default.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_DEFAULT 7 | E 8 | Default AMDP Rule 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_default_tokn.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_DEFAULT_TOKN 7 | E 8 | Default Token 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zapp_t_rule.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_RULE 7 | E 8 | ZAPP_S_RULE 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | Pretty Printer Rule 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /abap/src/zapp_settings_status_0100o01.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_SETTINGS_STATUS_0100O01 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZAPP_SETTINGS_STATUS_0100O01 15 | 36 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_func_in_1_ro.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_FUNC_IN_1_RO 7 | E 8 | Function in one row 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zapp_settings_user_command_i01.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_SETTINGS_USER_COMMAND_I01 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZAPP_SETTINGS_USER_COMMAND_I01 15 | 38 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /abap/src/zapp_t_rule_result.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_RULE_RESULT 7 | E 8 | ZAPP_S_RULE_RESULT 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | Rule Result 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_control_stru.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_CONTROL_STRU 7 | E 8 | AMDP Rule Control Structure 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_default_no_c.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_DEFAULT_NO_C 7 | E 8 | AMDP Default No Comment 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_new_line.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_NEW_LINE 7 | E 8 | Pretty Printer Rule AMDP New Line 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/zapp_t_stokesx_ext.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_STOKESX_EXT 7 | E 8 | ZAPP_S_STOKESX_EXT 9 | S 10 | STRU 11 | T 12 | D 13 | N 14 | Extended STOKESX 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_sel_ups_ins.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_SEL_UPS_INS 7 | E 8 | Pretty Printer Rule AMDP Select 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_left_right.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_LEFT_RIGHT 7 | E 8 | Pretty Printer Rule for LEFT and RIGHT 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_new_line_lft.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_NEW_LINE_LFT 7 | E 8 | New line left aligned from offset end 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_opn_bracket.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_OPN_BRACKET 7 | E 8 | Pretty Printer Rule AMDP Opening Bracket 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_cond_n_rl_is_no_b.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_COND_N_RL_IS_NO_B 7 | E 8 | Rule Condition next rule is no bracket 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_clse_bracket.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_CLSE_BRACKET 7 | E 8 | Pretty Printer Rule AMDP Closing Bracket 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_cond_from_tokn_rw.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_COND_FROM_TOKN_RW 7 | E 8 | Rule Condition Rule is under FROM Token 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_nl_lft_cond.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_RULE_AMDP_NL_LFT_COND 7 | E 8 | New line LEFT Alligned if conditions is fulfilled 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zapp_pretty_printer_test_co01.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_PRETTY_PRINTER_TEST_CO01 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZAPP_PRETTY_PRINTER_TEST_CO01 15 | 37 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zapp_pretty_printer_test_so01.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_PRETTY_PRINTER_TEST_SO01 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZAPP_PRETTY_PRINTER_TEST_SO01 15 | 37 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zapp_pretty_printer_test_ui01.prog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_PRETTY_PRINTER_TEST_UI01 7 | I 8 | E 9 | X 10 | 11 | 12 | 13 | R 14 | Include ZAPP_PRETTY_PRINTER_TEST_UI01 15 | 37 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zapp_t_rule_instances.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_RULE_INSTANCES 7 | E 8 | ZIF_APP_RULE 9 | R 10 | REF 11 | T 12 | D 13 | N 14 | Pretty Printer Rule Intstances 15 | I 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_cond_n_rl_is_no_b.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_cond_n_rl_is_no_b DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES zif_app_rule_condition. 8 | PROTECTED SECTION. 9 | PRIVATE SECTION. 10 | ENDCLASS. 11 | 12 | 13 | 14 | CLASS zcl_app_rule_cond_n_rl_is_no_b IMPLEMENTATION. 15 | METHOD zif_app_rule_condition~is_cond_fulfilled. 16 | DATA lr_next_rule TYPE REF TO zif_app_rule. 17 | 18 | rv_result = abap_true. 19 | lr_next_rule = ir_rule->get_next_rule( ). 20 | 21 | IF lr_next_rule IS NOT INITIAL 22 | AND lr_next_rule->get_token_up( ) = '('. 23 | rv_result = abap_false. 24 | ENDIF. 25 | 26 | ENDMETHOD. 27 | 28 | ENDCLASS. 29 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ![Icon](/doc/images/amdp_pretty_printer_icon.png) AMDP Pretty Printer 2 | 3 | SAP recommends a code push down of your ABAP logic to the HANA database to have a better performance. One of the possible ways to do this is to use AMDPs (ABAP Managed Database Procedures). They can be developed in Eclipse. SAP unfortunately does not provide a Pretty Printer (source code formatter) for it. For this reason I developed an AMDP Pretty Printer in my spare time. You can use it for free under the MIT licence (see [Installation](doc/Installation/README.md) for more details). 4 | 5 | ![AMDP Pretty Printer](/doc/images/amdp_pretty_printer.gif) 6 | 7 | ## [Installation](doc/Installation/README.md) 8 | ## [Configuration](doc/Configuration/README.md) 9 | ## [How does it work (technical)](doc/how_does_it_work/README.md) -------------------------------------------------------------------------------- /abap/src/zcx_app_exception.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCX_APP_EXCEPTION 7 | E 8 | Pretty Printer Exception 9 | 40 10 | 1 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | CONSTRUCTOR 18 | E 19 | CONSTRUCTOR 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zapp_pretty_printer_test_ui01.prog.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE ZAPP_PRETTY_PRINTER_TEST_UI01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module USER_COMMAND_0100 INPUT 6 | *&---------------------------------------------------------------------* 7 | * text 8 | *----------------------------------------------------------------------* 9 | MODULE user_command_0100 INPUT. 10 | 11 | CASE sy-ucomm. 12 | WHEN 'EXIT'. 13 | LEAVE TO SCREEN 0. 14 | WHEN 'PP'. 15 | gr_logic->pretty_print( ). 16 | WHEN 'ATM'. 17 | gr_logic->add_test_method( ). 18 | ENDCASE. 19 | ENDMODULE. 20 | -------------------------------------------------------------------------------- /abap/src/zapp_settings_user_command_i01.prog.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE ZAPP_SETTINGS_USER_COMMAND_I01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module USER_COMMAND_0100 INPUT 6 | *&---------------------------------------------------------------------* 7 | * text 8 | *----------------------------------------------------------------------* 9 | MODULE user_command_0100 INPUT. 10 | CASE gv_okcode. 11 | WHEN 'EXIT'. 12 | gr_settings->handle_exit( zapp_settings ). 13 | WHEN 'SAVE'. 14 | gr_settings->save( zapp_settings ). 15 | WHEN 'DELETE'. 16 | gr_settings->delete( ). 17 | ENDCASE. 18 | ENDMODULE. 19 | -------------------------------------------------------------------------------- /abap/src/zapp_settings_status_0100o01.prog.abap: -------------------------------------------------------------------------------- 1 | *----------------------------------------------------------------------* 2 | ***INCLUDE ZAPP_SETTINGS_STATUS_0100O01. 3 | *----------------------------------------------------------------------* 4 | *&---------------------------------------------------------------------* 5 | *& Module STATUS_0100 OUTPUT 6 | *&---------------------------------------------------------------------* 7 | *& 8 | *&---------------------------------------------------------------------* 9 | MODULE status_0100 OUTPUT. 10 | 11 | IF gr_settings->exists_settings( ). 12 | SET PF-STATUS '0100'. 13 | ELSE. 14 | SET PF-STATUS '0100' EXCLUDING 'DELETE'. 15 | ENDIF. 16 | IF p_set_g = abap_true. 17 | SET TITLEBAR '0100'. 18 | ELSE. 19 | SET TITLEBAR '0200' WITH sy-uname. 20 | ENDIF. 21 | ENDMODULE. 22 | -------------------------------------------------------------------------------- /abap/src/zcx_app_exception.clas.abap: -------------------------------------------------------------------------------- 1 | class ZCX_APP_EXCEPTION definition 2 | public 3 | inheriting from CX_STATIC_CHECK 4 | create public . 5 | 6 | public section. 7 | 8 | interfaces IF_T100_DYN_MSG . 9 | interfaces IF_T100_MESSAGE . 10 | 11 | methods CONSTRUCTOR 12 | importing 13 | !TEXTID like IF_T100_MESSAGE=>T100KEY optional 14 | !PREVIOUS like PREVIOUS optional . 15 | protected section. 16 | private section. 17 | ENDCLASS. 18 | 19 | 20 | 21 | CLASS ZCX_APP_EXCEPTION IMPLEMENTATION. 22 | 23 | 24 | method CONSTRUCTOR. 25 | CALL METHOD SUPER->CONSTRUCTOR 26 | EXPORTING 27 | PREVIOUS = PREVIOUS 28 | . 29 | clear me->textid. 30 | if textid is initial. 31 | IF_T100_MESSAGE~T100KEY = IF_T100_MESSAGE=>DEFAULT_TEXTID. 32 | else. 33 | IF_T100_MESSAGE~T100KEY = TEXTID. 34 | endif. 35 | endmethod. 36 | ENDCLASS. 37 | -------------------------------------------------------------------------------- /abap/src/zapp_t_keywords_sort.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_KEYWORDS_SORT 7 | E 8 | ZAPP_S_KEYWORDS 9 | S 10 | STRU 11 | T 12 | K 13 | N 14 | 0001 15 | Keywords 16 | 17 | 18 | 19 | ZAPP_T_KEYWORDS_SORT 20 | 0001 21 | 0001 22 | KEYWORD 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /abap/src/zapp_settings.tran.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_SETTINGS 7 | ZAPP_SETTINGS 8 | 1000 9 | gA== 10 | 11 | 12 | ZAPP_SETTINGS 13 | 1 14 | X 15 | X 16 | 17 | 18 | E 19 | ZAPP_SETTINGS 20 | AMDP Pretty Printer Settings 21 | 22 | 23 | 24 | D 25 | AMDP Pretty Printer Einstellungen 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate 4 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=16 5 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 6 | org.eclipse.jdt.core.compiler.compliance=16 7 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 8 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 9 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 10 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 11 | org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled 12 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 13 | org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning 14 | org.eclipse.jdt.core.compiler.release=enabled 15 | org.eclipse.jdt.core.compiler.source=16 16 | -------------------------------------------------------------------------------- /abap/src/zapp_s_keywords.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_S_KEYWORDS 7 | E 8 | INTTAB 9 | Keywords 10 | 1 11 | 12 | 13 | 14 | KEYWORD 15 | ZAPP_D_KEYWORD 16 | 0 17 | E 18 | 19 | 20 | 21 | D 22 | 23 | 24 | 25 | D 26 | Schlüsselwörter 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zapp_spec_bracket_logic.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_SPEC_BRACKET_LOGIC 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | Open Special Bracket Logic 13 | 14 | 15 | 16 | 0001 17 | E 18 | none 19 | 20 | 21 | 0002 22 | E 23 | C 24 | Call Statement 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zapp_open_bracket_spec_logic.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_OPEN_BRACKET_SPEC_LOGIC 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | Open Bracket Special Logic 13 | 14 | 15 | 16 | 0001 17 | E 18 | none 19 | 20 | 21 | 0002 22 | E 23 | C 24 | Call Statement 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/src/zapp/pretty/printer/Activator.java: -------------------------------------------------------------------------------- 1 | package zapp.pretty.printer; 2 | 3 | import org.eclipse.ui.plugin.AbstractUIPlugin; 4 | import org.osgi.framework.BundleContext; 5 | 6 | /** 7 | * The activator class controls the plug-in life cycle 8 | */ 9 | public class Activator extends AbstractUIPlugin { 10 | 11 | // The plug-in ID 12 | public static final String PLUGIN_ID = "zapp.pretty.printer"; //$NON-NLS-1$ 13 | 14 | // The shared instance 15 | private static Activator plugin; 16 | 17 | /** 18 | * The constructor 19 | */ 20 | public Activator() { 21 | } 22 | 23 | @Override 24 | public void start(BundleContext context) throws Exception { 25 | super.start(context); 26 | plugin = this; 27 | } 28 | 29 | @Override 30 | public void stop(BundleContext context) throws Exception { 31 | plugin = null; 32 | super.stop(context); 33 | } 34 | 35 | /** 36 | * Returns the shared instance 37 | * 38 | * @return the shared instance 39 | */ 40 | public static Activator getDefault() { 41 | return plugin; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /abap/src/zapp_comment.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_COMMENT 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | Comment 13 | 14 | 15 | 16 | 0001 17 | E 18 | No Comment 19 | 20 | 21 | 0002 22 | E 23 | S 24 | Single Line Comment 25 | 26 | 27 | 0003 28 | E 29 | M 30 | Multi Line Comment 31 | 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Bundle-ManifestVersion: 2 3 | Bundle-Name: AMDP Pretty Printer 4 | Bundle-SymbolicName: zapp.pretty.printer;singleton:=true 5 | Bundle-Version: 1.0.1.qualifier 6 | Bundle-Activator: zapp.pretty.printer.Activator 7 | Require-Bundle: org.eclipse.ui, 8 | org.eclipse.core.runtime, 9 | org.eclipse.core.resources;bundle-version="3.16.0", 10 | com.sap.adt.communication;bundle-version="3.22.1", 11 | com.sap.adt.compatibility;bundle-version="3.22.1", 12 | com.sap.adt.destinations;bundle-version="3.22.1", 13 | com.sap.adt.destinations.ui;bundle-version="3.22.1", 14 | com.sap.adt.tools.core;bundle-version="3.22.3", 15 | com.sap.adt.project.ui;bundle-version="3.22.1", 16 | com.sap.adt.tools.abapsource;bundle-version="3.22.3", 17 | com.sap.adt.tools.abapsource.ui;bundle-version="3.22.3", 18 | com.sap.adt.tools.core.ui, 19 | com.sap.adt.util.ui, 20 | org.eclipse.ui.workbench.texteditor, 21 | org.eclipse.jface.text 22 | Bundle-RequiredExecutionEnvironment: JavaSE-16 23 | Automatic-Module-Name: zapp.pretty.printer 24 | Bundle-ActivationPolicy: lazy 25 | -------------------------------------------------------------------------------- /abap/src/zcl_app_adt_disc_pretty_print.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_ADT_DISC_PRETTY_PRINT 7 | E 8 | Pretty Printer Discovery Resource Controller 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | I 17 | 001 18 | AMDP Pretty Printer 19 | 56 20 | 21 | 22 | 23 | 24 | D 25 | 26 | 27 | I 28 | 001 29 | AMDP Pretty Printer 30 | 56 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | zapp.pretty.printer 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | org.eclipse.pde.ManifestBuilder 15 | 16 | 17 | 18 | 19 | org.eclipse.pde.SchemaBuilder 20 | 21 | 22 | 23 | 24 | 25 | org.eclipse.pde.PluginNature 26 | org.eclipse.jdt.core.javanature 27 | 28 | 29 | 30 | 1645349827794 31 | 32 | 30 33 | 34 | org.eclipse.core.resources.regexFilterMatcher 35 | node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Frank Müller 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /abap/src/zapp_d_token.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_TOKEN 7 | E 8 | ZAPP_TOKEN 9 | 05 10 | 05 11 | 05 12 | 05 13 | Token 14 | Token 15 | Token 16 | Token 17 | Token 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Token 28 | Token 29 | Token 30 | Token 31 | Token 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_cond_from_tokn_rw.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_cond_from_tokn_rw DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES zif_app_rule_condition. 8 | PROTECTED SECTION. 9 | PRIVATE SECTION. 10 | ENDCLASS. 11 | 12 | 13 | 14 | CLASS zcl_app_rule_cond_from_tokn_rw IMPLEMENTATION. 15 | METHOD zif_app_rule_condition~is_cond_fulfilled. 16 | DATA lv_token TYPE zapp_d_token. 17 | DATA lt_token TYPE zapp_t_token. 18 | DATA lt_stop_token TYPE zapp_t_token. 19 | DATA lr_from_rule TYPE REF TO zif_app_rule. 20 | 21 | lv_token = 'UNION'. 22 | INSERT lv_token INTO TABLE lt_stop_token. 23 | 24 | lv_token = 'FROM'. 25 | INSERT lv_token INTO TABLE lt_token. 26 | 27 | lr_from_rule = zcl_app_amdp_rule_utilities=>get_rule_in_stm_on_same_lvl_rw( 28 | EXPORTING 29 | ir_start_rule = ir_rule 30 | it_token = lt_token 31 | it_stop_token = lt_stop_token 32 | ). 33 | IF lr_from_rule IS NOT INITIAL. 34 | rv_result = abap_true. 35 | ENDIF. 36 | 37 | ENDMETHOD. 38 | 39 | ENDCLASS. 40 | -------------------------------------------------------------------------------- /abap/src/zapp_d_comment.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_COMMENT 7 | E 8 | ZAPP_COMMENT 9 | 55 10 | 10 11 | 20 12 | 40 13 | Comment 14 | Comment 15 | Comment 16 | Comment 17 | Comment 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Kommentar 28 | Kommentar 29 | Kommentar 30 | Kommentar 31 | Kommentar 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_keyword.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_KEYWORD 7 | E 8 | STRING 9 | 55 10 | 10 11 | 20 12 | 40 13 | Keyword 14 | Keyword 15 | Keyword 16 | Keyword 17 | Keyword 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Schlüsselwort 28 | Schlüsselwort 29 | Schlüssel. 30 | Schlüsselwort 31 | Schlüsselwort 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_delimiter.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_DELIMITER 7 | E 8 | ZAPP_DELIMITER 9 | 09 10 | 09 11 | 09 12 | 09 13 | Delimiter 14 | Delimiter 15 | Delimiter 16 | Delimiter 17 | Delimiter 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Trennzeichen 28 | Trennzei. 29 | Trennzei. 30 | Trennzei. 31 | Trennzei. 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_sqlscript.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_SQLSCRIPT 7 | E 8 | ZAPP_SQLSCRIPT 9 | 09 10 | 09 11 | 09 12 | 09 13 | SQLSCRIPT 14 | SQLSCRIPT 15 | SQLSCRIPT 16 | SQLSCRIPT 17 | SQLSCRIPT 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | SQLSCRIPT 28 | SQLSCRIPT 29 | SQLSCRIPT 30 | SQLSCRIPT 31 | SQLSCRIPT 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_rule_class.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_RULE_CLASS 7 | E 8 | SEOCLSNAME 9 | 30 10 | 10 11 | 20 12 | 40 13 | Rule Class 14 | Rule Class 15 | Rule Class 16 | Rule Class 17 | Rule Class 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Regelklasse 28 | Regelklasse 29 | Regelklas. 30 | Regelklasse 31 | Regelklasse 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_left_right.clas.abap: -------------------------------------------------------------------------------- 1 | "!

Pretty Printer Rule for LEFT and RIGHT

2 | "! Do the inherited logic if the condition is full filled 3 | "! else do the comma rule logic for the string function left and right 4 | CLASS zcl_app_rule_amdp_left_right DEFINITION 5 | PUBLIC 6 | INHERITING FROM zcl_app_rule_amdp_nl_lft_cond 7 | 8 | CREATE PUBLIC . 9 | 10 | PUBLIC SECTION. 11 | 12 | METHODS zif_app_rule~finalize_init REDEFINITION. 13 | 14 | PROTECTED SECTION. 15 | PRIVATE SECTION. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS zcl_app_rule_amdp_left_right IMPLEMENTATION. 21 | 22 | METHOD zif_app_rule~finalize_init. 23 | 24 | super->zif_app_rule~finalize_init( ). 25 | IF is_logic_active( ) = abap_false. 26 | RETURN. 27 | ENDIF. 28 | 29 | IF mv_cond_fulfilled_set = abap_false. 30 | IF zcl_app_amdp_rule_utilities=>is_avd_lb_aft_comma_in_fu_act( 31 | ir_start_rule = me 32 | ir_settings = mr_settings ) = abap_true. 33 | 34 | zcl_app_amdp_rule_utilities=>avoid_lb_after_comma_in_func( me ). 35 | ENDIF. 36 | ENDIF. 37 | 38 | ENDMETHOD. 39 | 40 | ENDCLASS. 41 | -------------------------------------------------------------------------------- /abap/src/ezapp_settings.enqu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | EZAPP_SETTINGS 7 | E 8 | E 9 | ZAPP_SETTINGS 10 | AMDP Pretty Printer Settings 11 | 12 | 13 | 14 | EZAPP_SETTINGS 15 | ZAPP_SETTINGS 16 | 0001 17 | ZAPP_SETTINGS 18 | E 19 | 20 | 21 | 22 | 23 | EZAPP_SETTINGS 24 | 0001 25 | UNAME 26 | ZAPP_SETTINGS 27 | UNAME 28 | X 29 | E 30 | XUS 31 | USR02 32 | P 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /abap/src/zapp_sqlscript.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_SQLSCRIPT 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | SQLSCRIPT 13 | 14 | 15 | 16 | 0001 17 | E 18 | No 19 | 20 | 21 | 0002 22 | E 23 | P 24 | Pending 25 | 26 | 27 | 0003 28 | E 29 | E 30 | End of Pending 31 | 32 | 33 | 0004 34 | E 35 | S 36 | SQLSCRIPT 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /abap/src/zapp_d_context.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_CONTEXT 7 | E 8 | ZAPP_CONTEXT 9 | 55 10 | 10 11 | 20 12 | 40 13 | Pretty Printer Context 14 | Pretty Printer Context 15 | PP Context 16 | PP Context 17 | Pretty Printer Context 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Pretty Printer Kontext 28 | Pretty Printer Kontext 29 | PP Kontext 30 | PP Kontext 31 | Pretty Printer Kontext 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_rule.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_RULE 7 | E 8 | ZAPP_RULE 9 | 55 10 | 10 11 | 20 12 | 40 13 | Pretty Printer Rule 14 | Pretty Printer Rule 15 | PP Rule 16 | Pretty Printer Rule 17 | Pretty Printer Rule 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | AMDP Pretty Printer Regel 28 | AMDP Pretty Printer Regel 29 | PP Regel 30 | Pretty Printer Regel 31 | AMDP Pretty Printer Regel 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_org_tab_row.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_ORG_TAB_ROW 7 | E 8 | ZAPP_ORG_TAB_ROW 9 | 55 10 | 10 11 | 20 12 | 40 13 | Original Tab Row 14 | Original Tab Row 15 | Orig Tab R 16 | Original Tab Row 17 | Original Tab Row 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Original Tabellenzeile 28 | Original Tabellenzeile 29 | Orig Tab Z 30 | Original Tabellenzei 31 | Original Tabellenzeile 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_additional_indent.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_ADDITIONAL_INDENT 7 | E 8 | INT4 9 | 55 10 | 10 11 | 20 12 | 40 13 | Additional Indent 14 | Additional Indent 15 | Add Indent 16 | Additional Indent 17 | Additional Indent 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Zusatzliche Einrückung 28 | Zusatzliche Einrückung 29 | Zus Einrü. 30 | Zusatzliche Einrücku 31 | Zusatzliche Einrückung 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_rule_cond_class.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_RULE_COND_CLASS 7 | E 8 | SEOCLSNAME 9 | 30 10 | 10 11 | 20 12 | 40 13 | Rule Condition Class 14 | Rule Condition Class 15 | Rule C Cl 16 | Rule Condition Class 17 | Rule Condition Class 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Klasse Regelbedingung 28 | Klasse Regelbedingung 29 | Rgl Be Kla 30 | Klasse Regelbeding. 31 | Klasse Regelbedingung 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_hl_context.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_HL_CONTEXT 7 | E 8 | ZAPP_CONTEXT 9 | 55 10 | 10 11 | 20 12 | 40 13 | Pretty Printer HL Context 14 | Pretty Printer HL Context 15 | PP HL Cont 16 | PP HL Context 17 | Pretty Printer HL Context 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | PP Übergeordneter Kontext 28 | PP Übergeordneter Kontext 29 | PP ÜG Kont 30 | PP ÜG Kontext 31 | PP Übergeordneter Kontext 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_no_lb_at_comma.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_NO_LB_AT_COMMA 7 | E 8 | XFELD 9 | 55 10 | 10 11 | 20 12 | 40 13 | No Line Break at Comma 14 | No Line Break at Comma 15 | No LB Com 16 | No LB at Comma 17 | No Line Break at Comma 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Keine Neue Zeile bei Komma 28 | Keine Neue Zeile bei Komma 29 | K N Z Kom 30 | K N Zeile bei Komma 31 | Keine Neue Zeile bei Komma 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_new_line_req.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_NEW_LINE_REQ 7 | E 8 | XFELD 9 | 55 10 | 10 11 | 20 12 | 40 13 | Is New Line Requested 14 | Is New Line Requested 15 | New L Req 16 | Is New Line Req 17 | Is New Line Requested 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Ist eine neue Zeile angefragt 28 | Ist eine neue Zeile angefragt 29 | Neue Zeile 30 | Neue Zeile angefragt 31 | Ist eine neue Zeile angefragt 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_nl_lft_cond.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_nl_lft_cond DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_rule_amdp_new_line_lft 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | PROTECTED SECTION. 9 | METHODS set_add_indent REDEFINITION. 10 | DATA mv_cond_fulfilled_set TYPE abap_bool. 11 | DATA mv_cond_fulfilled TYPE abap_bool. 12 | PRIVATE SECTION. 13 | 14 | ENDCLASS. 15 | 16 | 17 | 18 | CLASS zcl_app_rule_amdp_nl_lft_cond IMPLEMENTATION. 19 | 20 | 21 | METHOD set_add_indent. 22 | DATA lr_rule_cond TYPE REF TO zif_app_rule_condition. 23 | 24 | CLEAR mv_add_indent. 25 | IF is_logic_active( ) = abap_false. 26 | RETURN. 27 | ENDIF. 28 | 29 | IF mv_cond_fulfilled_set = abap_false. 30 | mv_cond_fulfilled_set = abap_true. 31 | IF mr_rule_data->rule_cond_class IS INITIAL. 32 | mv_cond_fulfilled = abap_true. 33 | ELSE. 34 | CREATE OBJECT lr_rule_cond TYPE (mr_rule_data->rule_cond_class). 35 | mv_cond_fulfilled = lr_rule_cond->is_cond_fulfilled( me ). 36 | ENDIF. 37 | ENDIF. 38 | 39 | IF mv_cond_fulfilled = abap_false. 40 | RETURN. 41 | ENDIF. 42 | 43 | super->set_add_indent( ). 44 | ENDMETHOD. 45 | 46 | 47 | 48 | ENDCLASS. 49 | -------------------------------------------------------------------------------- /abap/src/zcl_app_adt_disc_pretty_print.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_adt_disc_pretty_print DEFINITION 2 | PUBLIC 3 | INHERITING FROM cl_adt_disc_res_app_base 4 | 5 | CREATE PUBLIC . 6 | 7 | 8 | PUBLIC SECTION. 9 | METHODS if_adt_rest_rfc_application~get_static_uri_path REDEFINITION. 10 | CONSTANTS co_root_schema TYPE string VALUE 'zapp.pretty.printer'. "#EC NOTEXT 11 | CONSTANTS co_xml_application TYPE string VALUE 'application/xml' ##NO_TEXT. 12 | PROTECTED SECTION. 13 | 14 | METHODS get_application_title REDEFINITION. 15 | METHODS register_resources REDEFINITION. 16 | 17 | PRIVATE SECTION. 18 | ENDCLASS. 19 | 20 | 21 | 22 | CLASS zcl_app_adt_disc_pretty_print IMPLEMENTATION. 23 | 24 | 25 | METHOD get_application_title. 26 | result = 'AMDP Pretty Printer'(001). 27 | ENDMETHOD. 28 | 29 | 30 | METHOD if_adt_rest_rfc_application~get_static_uri_path. 31 | result = '/sap/bc/adt/zapp'. 32 | ENDMETHOD. 33 | 34 | 35 | METHOD register_resources. 36 | 37 | registry->register_discoverable_resource( 38 | url = '/zapp_pretty_printer' 39 | handler_class = 'ZCL_APP_ADT_REST_PRETTY_PRINT' 40 | description = 'Pretty Printer' 41 | category_scheme = co_root_schema 42 | category_term = 'pretty_printer' ). 43 | 44 | ENDMETHOD. 45 | ENDCLASS. 46 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_default_tokn.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_default_tokn DEFINITION 2 | PUBLIC 3 | FINAL 4 | INHERITING FROM ZCL_APP_RULE_AMDP_NEW_LINE_LFT 5 | 6 | CREATE PUBLIC . 7 | 8 | PUBLIC SECTION. 9 | PROTECTED SECTION. 10 | METHODS is_logic_active REDEFINITION. 11 | PRIVATE SECTION. 12 | ENDCLASS. 13 | 14 | 15 | 16 | CLASS zcl_app_rule_amdp_default_tokn IMPLEMENTATION. 17 | METHOD is_logic_active. 18 | DATA lv_token TYPE zapp_d_token. 19 | DATA lt_token TYPE zapp_t_token. 20 | DATA lt_stop_token TYPE zapp_t_token. 21 | DATA lr_select_rule TYPE REF TO zif_app_rule. 22 | 23 | rv_result = super->is_logic_active( ). 24 | 25 | IF rv_result = abap_false. 26 | RETURN. 27 | ENDIF. 28 | 29 | lv_token = 'UNION'. 30 | INSERT lv_token INTO TABLE lt_stop_token. 31 | 32 | lv_token = 'SELECT'. 33 | INSERT lv_token INTO TABLE lt_token. 34 | 35 | lr_select_rule = zcl_app_amdp_rule_utilities=>get_rule_in_stm_on_same_lvl_rw( 36 | EXPORTING 37 | ir_start_rule = me 38 | it_token = lt_token 39 | it_stop_token = lt_stop_token 40 | ). 41 | IF lr_select_rule IS INITIAL. 42 | rv_result = abap_false. 43 | ENDIF. 44 | 45 | ENDMETHOD. 46 | 47 | ENDCLASS. 48 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_func_in_1_ro.clas.abap: -------------------------------------------------------------------------------- 1 | "! AMDP Rule to avoid line break at comma if the closing bracket of this function is in the same row 2 | "! and addition there are no sub functions that contains a comma 3 | "! Example: "substring(rtrim(table.field),3,4)" will be in one row, 4 | "! substring(concat("Bla","Blub"),2,3) will be split in several rows 5 | "!

Function in one row

6 | CLASS zcl_app_rule_amdp_func_in_1_ro DEFINITION 7 | PUBLIC 8 | INHERITING FROM zcl_app_rule_amdp_default_no_c 9 | CREATE PUBLIC . 10 | 11 | PUBLIC SECTION. 12 | METHODS zif_app_rule~finalize_init REDEFINITION. 13 | 14 | PROTECTED SECTION. 15 | 16 | PRIVATE SECTION. 17 | ENDCLASS. 18 | 19 | 20 | 21 | CLASS zcl_app_rule_amdp_func_in_1_ro IMPLEMENTATION. 22 | 23 | METHOD zif_app_rule~finalize_init. 24 | 25 | super->zif_app_rule~finalize_init( ). 26 | IF is_logic_active( ) = abap_false. 27 | RETURN. 28 | ENDIF. 29 | 30 | IF zcl_app_amdp_rule_utilities=>is_avd_lb_aft_comma_in_fu_act( 31 | ir_start_rule = me 32 | ir_settings = mr_settings ) = abap_true. 33 | 34 | zcl_app_amdp_rule_utilities=>avoid_lb_after_comma_in_func( me ). 35 | ENDIF. 36 | 37 | ENDMETHOD. 38 | 39 | ENDCLASS. 40 | -------------------------------------------------------------------------------- /abap/src/zapp_d_comment_detail.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_COMMENT_DETAIL 7 | E 8 | ZAPP_COMMENT_DETAIL 9 | 55 10 | 10 11 | 20 12 | 40 13 | Pretty Printer Comment Detail 14 | Pretty Printer Comment Detail 15 | PP Com Det 16 | PP Comment Detail 17 | Pretty Printer Comment Detail 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Pretty Printer Kommentar Detail 28 | Pretty Printer Kommentar Detail 29 | PP Kom Det 30 | PP Kommentar Detail 31 | Pretty Printer Kommentar Detail 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zapp_d_spec_bracket_logic.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_SPEC_BRACKET_LOGIC 7 | E 8 | ZAPP_SPEC_BRACKET_LOGIC 9 | 55 10 | 10 11 | 20 12 | 40 13 | Special Bracket Logic 14 | Special Bracket Logic 15 | Sp Bra Log 16 | Spel Bracket Logic 17 | Special Bracket Logic 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Spezialklammerlogik 28 | Spezialklammerlogik 29 | Spz Klm Lo 30 | Spezialklammerlogik 31 | Spezialklammerlogik 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_new_line_indent_diff.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_NEW_LINE_INDENT_DIFF 7 | E 8 | INT4 9 | 55 10 | 10 11 | 20 12 | 40 13 | New Line Indent Difference 14 | New Line Indent Difference 15 | NL IndentD 16 | New Line Indent Diff 17 | New Line Indent Difference 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Einrückungsdifferenz zu neuer Zeile 28 | Einrückungsdifferenz zu neuer Zeile 29 | Einrü. D Z 30 | Einrück. Diff. Zeile 31 | Einrückungsdifferenz zu neuer Zeile 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/zapp_d_new_statem_indent_diff.dtel.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_D_NEW_STATEM_INDENT_DIFF 7 | E 8 | INT4 9 | 55 10 | 10 11 | 20 12 | 40 13 | New Statement Indent Difference 14 | New Statement Indent Difference 15 | NS IndentD 16 | New Stmt Indent Diff 17 | New Statement Indent Difference 18 | E 19 | D 20 | 21 | 22 | D 23 | 24 | 25 | 26 | D 27 | Einrückungsdifferenz zu neuen Ausdruck 28 | Einrückungsdifferenz zu neuen Ausdruck 29 | Einrü. D A 30 | Einrückungsdifferenz 31 | Einrückungsdifferenz zu neuen Ausdruck 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_new_line_lft.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_new_line_lft DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_rule_amdp_new_line 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | METHODS zif_app_rule~get_cur_offset_start REDEFINITION. 8 | 9 | PROTECTED SECTION. 10 | METHODS set_add_indent 11 | RAISING zcx_app_exception. 12 | PRIVATE SECTION. 13 | ENDCLASS. 14 | 15 | 16 | 17 | CLASS zcl_app_rule_amdp_new_line_lft IMPLEMENTATION. 18 | 19 | METHOD zif_app_rule~get_cur_offset_start. 20 | 21 | IF mv_cur_offset_start_set = abap_true. 22 | rv_result = mv_cur_offset_start. 23 | RETURN. 24 | ENDIF. 25 | 26 | set_add_indent( ). 27 | 28 | rv_result = super->zif_app_rule~get_cur_offset_start( ). 29 | 30 | ENDMETHOD. 31 | 32 | METHOD set_add_indent. 33 | DATA lt_text TYPE sourcetable. 34 | DATA lr_text TYPE REF TO string. 35 | 36 | IF is_logic_active( ) = abap_true. 37 | IF mr_rule_data->add_indent IS INITIAL. 38 | 39 | lt_text = zif_app_rule~get_text( ). 40 | 41 | READ TABLE lt_text REFERENCE INTO lr_text 42 | INDEX 1. 43 | IF sy-subrc = 0. 44 | mv_add_indent = strlen( lr_text->* ) * -1. 45 | ENDIF. 46 | ELSE. 47 | mv_add_indent = mr_rule_data->add_indent. 48 | ENDIF. 49 | ENDIF. 50 | ENDMETHOD. 51 | 52 | ENDCLASS. 53 | -------------------------------------------------------------------------------- /abap/src/zapp_comment_detail.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_COMMENT_DETAIL 7 | E 8 | CHAR 9 | 000001 10 | 000001 11 | X 12 | AMDP Pretty Printer Comment Detail 13 | 14 | 15 | 16 | 0001 17 | E 18 | None 19 | 20 | 21 | 0002 22 | E 23 | S 24 | Start 25 | 26 | 27 | 0003 28 | E 29 | P 30 | Part 31 | 32 | 33 | 0004 34 | E 35 | L 36 | Start begin of line 37 | 38 | 39 | 0005 40 | E 41 | I 42 | Start begin of line indentable 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zapp_t_rule_sort.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_RULE_SORT 7 | E 8 | ZAPP_S_RULE 9 | S 10 | STRU 11 | T 12 | K 13 | N 14 | 0004 15 | Pretty Printer Rules Sort 16 | 17 | 18 | 19 | ZAPP_T_RULE_SORT 20 | 0001 21 | 0002 22 | TOKEN 23 | 24 | 25 | ZAPP_T_RULE_SORT 26 | 0002 27 | 0003 28 | CONTEXT 29 | 30 | 31 | ZAPP_T_RULE_SORT 32 | 0003 33 | 0004 34 | HL_CONTEXT 35 | 36 | 37 | ZAPP_T_RULE_SORT 38 | 0004 39 | 0005 40 | SQLSCRIPT 41 | 42 | 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /abap/src/zapp_lb_after_comma_rule.doma.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_LB_AFTER_COMMA_RULE 7 | E 8 | NUMC 9 | 000001 10 | 000001 11 | X 12 | Line Break after Comma Rule 13 | 14 | 15 | 16 | 0001 17 | E 18 | 0 19 | Always Line Break 20 | 21 | 22 | 0002 23 | E 24 | 1 25 | No Line Break after Comma 26 | 27 | 28 | 0003 29 | E 30 | 2 31 | Not at Simple Functions, Dep. on ) 32 | 33 | 34 | 0004 35 | E 36 | 3 37 | Not at Simple Functions, Dep. on ) And Sub Function 38 | 39 | 40 | 0005 41 | E 42 | 4 43 | Not at Simple Functions, Dep. on ) Sub Func And Keywords 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zapp_s_rule_search.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_S_RULE_SEARCH 7 | E 8 | INTTAB 9 | Pretty Printer Rule Search 10 | 1 11 | 12 | 13 | 14 | TOKEN 15 | ZAPP_D_TOKEN 16 | 0 17 | E 18 | 19 | 20 | CONTEXT 21 | ZAPP_D_CONTEXT 22 | 0 23 | E 24 | 25 | 26 | HL_CONTEXT 27 | ZAPP_D_HL_CONTEXT 28 | 0 29 | E 30 | 31 | 32 | SQLSCRIPT 33 | ZAPP_D_SQLSCRIPT 34 | 0 35 | X 36 | F 37 | E 38 | 39 | 40 | 41 | D 42 | 43 | 44 | 45 | D 46 | AMDP Pretty Printer Regelsuche 47 | 48 | 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /abap/src/zcl_app_scanner.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_SCANNER 7 | E 8 | Pretty Printer Scanner 9 | 1 10 | X 11 | X 12 | X 13 | X 14 | 15 | 16 | 17 | SCAN 18 | E 19 | Scan Source Code 20 | 21 | 22 | 23 | 24 | SCAN 25 | ET_STATEMENT 26 | E 27 | Code Inspector: Anweisungen 28 | 29 | 30 | SCAN 31 | ET_STRUCTURE 32 | E 33 | Code Inspector: SSTRUC 34 | 35 | 36 | SCAN 37 | ET_TOKEN_EXT 38 | E 39 | Code Inspector: Tokens extended 40 | 41 | 42 | SCAN 43 | IT_SOURCE 44 | E 45 | ABAP4 Sourcetext as table of string 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /abap/src/zapp_s_rule_result.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_S_RULE_RESULT 7 | E 8 | INTTAB 9 | Rule Result 10 | 1 11 | 12 | 13 | 14 | RULE 15 | ZIF_APP_RULE 16 | 0 17 | REF 18 | REF RI 19 | R 20 | I 21 | 22 | 23 | CUR_ROW 24 | INT4 25 | 0 26 | E 27 | 28 | 29 | CUR_OFF_SET_START 30 | INT4 31 | 0 32 | E 33 | 34 | 35 | CUR_OFF_SET_END 36 | INT4 37 | 0 38 | E 39 | 40 | 41 | TEXT 42 | SOURCETABLE 43 | 0 44 | TTYP 45 | TTYPL 46 | L 47 | 48 | 49 | END_ROW 50 | INT4 51 | 0 52 | E 53 | 54 | 55 | 56 | D 57 | 58 | 59 | 60 | D 61 | Regelergebnis 62 | 63 | 64 | 65 | 66 | 67 | -------------------------------------------------------------------------------- /abap/src/zcl_app_adt_rest_pretty_print.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS ZCL_APP_ADT_REST_PRETTY_PRINT DEFINITION 2 | PUBLIC 3 | INHERITING FROM cl_adt_rest_resource 4 | FINAL 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | 9 | METHODS post REDEFINITION . 10 | METHODS get REDEFINITION . 11 | PROTECTED SECTION. 12 | PRIVATE SECTION. 13 | 14 | 15 | ENDCLASS. 16 | 17 | 18 | 19 | CLASS ZCL_APP_ADT_REST_PRETTY_PRINT IMPLEMENTATION. 20 | 21 | 22 | METHOD get. 23 | DATA lv_response TYPE string. 24 | lv_response = 'Welcome to Pretty Printer, please use POST Method'. 25 | 26 | response->set_body_data( 27 | content_handler = cl_adt_rest_cnt_hdl_factory=>get_instance( )->get_handler_for_plain_text( ) 28 | data = lv_response ). 29 | ENDMETHOD. 30 | 31 | 32 | METHOD post. 33 | DATA lt_source TYPE sourcetable. 34 | DATA lt_app_res TYPE sourcetable. 35 | DATA lr_ex_pp TYPE REF TO zcx_app_exception. 36 | data lr_settings type ref to zif_app_settings. 37 | 38 | 39 | request->get_body_data( 40 | EXPORTING 41 | content_handler = cl_adt_rest_cnt_hdl_factory=>get_instance( )->get_handler_for_plain_text( ) 42 | IMPORTING 43 | data = lt_source ). 44 | 45 | TRY. 46 | create object lr_settings type zcl_app_settings. 47 | lt_app_res = NEW zcl_app_pretty_printer( )->pretty_print( 48 | it_source = lt_source 49 | ir_settings = lr_settings ). 50 | CATCH zcx_app_exception INTO lr_ex_pp. 51 | RAISE EXCEPTION TYPE cx_sedi_adt_err_pretty_printer 52 | EXPORTING 53 | textid = cx_adt_rest_data_invalid=>create_textid_from_exc_text( exception = lr_ex_pp ). 54 | ENDTRY. 55 | 56 | response->set_body_data( 57 | content_handler = cl_adt_rest_cnt_hdl_factory=>get_instance( )->get_handler_for_plain_text( ) 58 | data = lt_app_res ). 59 | 60 | ENDMETHOD. 61 | ENDCLASS. 62 | -------------------------------------------------------------------------------- /abap/src/zapp_t_stokesx_ext_st.ttyp.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_T_STOKESX_EXT_ST 7 | E 8 | ZAPP_S_STOKESX_EXT 9 | S 10 | STRU 11 | S 12 | K 13 | U 14 | 0004 15 | Extended STOKESX sorted 16 | O 17 | 18 | 19 | 20 | ZAPP_T_STOKESX_EXT_ST 21 | 0001 22 | 0006 23 | ORG_TAB_ROW 24 | 25 | 26 | ZAPP_T_STOKESX_EXT_ST 27 | ROW_COL 28 | 0001 29 | 0002 30 | ROW 31 | 32 | 33 | ZAPP_T_STOKESX_EXT_ST 34 | STR_UP 35 | 0001 36 | 0012 37 | STR_UP 38 | 39 | 40 | ZAPP_T_STOKESX_EXT_ST 41 | ROW_COL 42 | 0002 43 | 0003 44 | COL 45 | 46 | 47 | 48 | 49 | ZAPP_T_STOKESX_EXT_ST 50 | ROW_COL 51 | S 52 | K 53 | 54 | 55 | ZAPP_T_STOKESX_EXT_ST 56 | STR_UP 57 | S 58 | K 59 | 60 | 61 | 62 | 63 | 64 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_default_no_c.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_default_no_c DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_rule_amdp_default 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | METHODS zif_app_rule~finalize_init REDEFINITION. 8 | PROTECTED SECTION. 9 | METHODS set_logic_active 10 | RAISING zcx_app_exception. 11 | 12 | METHODS is_logic_active 13 | RETURNING VALUE(rv_result) TYPE abap_bool 14 | RAISING zcx_app_exception. 15 | DATA mv_logic_active TYPE abap_bool. 16 | PRIVATE SECTION. 17 | 18 | DATA mv_logic_active_set TYPE abap_bool. 19 | 20 | ENDCLASS. 21 | 22 | 23 | 24 | CLASS zcl_app_rule_amdp_default_no_c IMPLEMENTATION. 25 | 26 | 27 | METHOD is_logic_active. 28 | 29 | IF mv_logic_active_set = abap_true. 30 | rv_result = mv_logic_active. 31 | ELSE. 32 | RAISE EXCEPTION TYPE zcx_app_exception 33 | MESSAGE ID 'ZAPP_MC_PRETTY_PRINT' 34 | TYPE 'E' 35 | NUMBER '015' 36 | WITH mr_rule_data->rule_name. 37 | ENDIF. 38 | 39 | ENDMETHOD. 40 | 41 | 42 | METHOD set_logic_active. 43 | IF zif_app_rule~is_comment( ) = abap_true. 44 | mv_logic_active = abap_false. 45 | ELSE. 46 | mv_logic_active = abap_true. 47 | ENDIF. 48 | mv_logic_active_set = abap_true. 49 | ENDMETHOD. 50 | 51 | 52 | METHOD zif_app_rule~finalize_init. 53 | super->zif_app_rule~finalize_init( ). 54 | set_logic_active( ). 55 | 56 | IF is_logic_active( ) = abap_true. 57 | IF mv_add_indent_set = abap_false. 58 | "This is initialization so don't set the flag mv_add_indent_set, 59 | "else some rules doesn't work 60 | mv_add_indent = mr_rule_data->add_indent . 61 | ENDIF. 62 | ELSE. 63 | "If the token is a comment, then clear the rule_data, 64 | "else this could lead to issues with indent 65 | CLEAR mr_rule_data->is_new_line_req. 66 | CLEAR mr_rule_data->new_line_indent_diff. 67 | CLEAR mr_rule_data->new_statement_indent_diff. 68 | CLEAR mr_rule_data->add_indent. 69 | ENDIF. 70 | 71 | ENDMETHOD. 72 | ENDCLASS. 73 | -------------------------------------------------------------------------------- /abap/src/zcl_app_settings.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_settings DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES zif_app_settings. 8 | CLASS-METHODS class_constructor. 9 | CLASS-METHODS get_settings_from_cust. 10 | CLASS-METHODS set_settings 11 | IMPORTING is_settings TYPE zapp_settings. 12 | 13 | PROTECTED SECTION. 14 | PRIVATE SECTION. 15 | CLASS-DATA ss_settings TYPE zapp_settings. 16 | 17 | ENDCLASS. 18 | 19 | 20 | CLASS zcl_app_settings IMPLEMENTATION. 21 | 22 | METHOD class_constructor. 23 | get_settings_from_cust( ). 24 | 25 | ENDMETHOD. 26 | 27 | METHOD zif_app_settings~is_line_break_after_comma_req. 28 | 29 | rv_result = xsdbool( ss_settings-lb_after_comma_rule <> zif_app_settings~cos_lb_rules_at_comma-no_line_break ). 30 | 31 | ENDMETHOD. 32 | 33 | 34 | METHOD get_settings_from_cust. 35 | SELECT SINGLE * FROM zapp_settings 36 | INTO ss_settings 37 | WHERE uname = sy-uname. 38 | IF sy-subrc <> 0. 39 | SELECT SINGLE * FROM zapp_settings 40 | INTO ss_settings 41 | WHERE uname = '*'. 42 | IF sy-subrc <> 0. 43 | CLEAR ss_settings. 44 | ENDIF. 45 | ENDIF. 46 | ENDMETHOD. 47 | 48 | METHOD set_settings. 49 | ss_settings = is_settings. 50 | ENDMETHOD. 51 | 52 | 53 | METHOD zif_app_settings~is_always_line_break_aft_comma. 54 | rv_result = xsdbool( ss_settings-lb_after_comma_rule = zif_app_settings~cos_lb_rules_at_comma-always_line_break ). 55 | ENDMETHOD. 56 | 57 | METHOD zif_app_settings~is_no_lb_at_co_s_fu_dep_sfu. 58 | rv_result = xsdbool( ss_settings-lb_after_comma_rule = zif_app_settings~cos_lb_rules_at_comma-dep_on_cls_bracket_and_sub_fu ). 59 | ENDMETHOD. 60 | 61 | METHOD zif_app_settings~is_no_lb_at_co_s_fu_dep_cbr_o. 62 | rv_result = xsdbool( ss_settings-lb_after_comma_rule = zif_app_settings~cos_lb_rules_at_comma-dep_on_cls_bracket_only ). 63 | ENDMETHOD. 64 | 65 | METHOD zif_app_settings~is_no_lb_at_co_s_fu_dep_sfu_kw. 66 | rv_result = xsdbool( ss_settings-lb_after_comma_rule = zif_app_settings~cos_lb_rules_at_comma-dep_on_cls_br_sf_and_keywrd ). 67 | ENDMETHOD. 68 | ENDCLASS. 69 | -------------------------------------------------------------------------------- /abap/src/zif_app_settings.intf.abap: -------------------------------------------------------------------------------- 1 | INTERFACE zif_app_settings 2 | PUBLIC . 3 | 4 | "!

Is line break after comma required

5 | "! 6 | "! @parameter RV_RESULT |

Result

7 | METHODS is_line_break_after_comma_req 8 | RETURNING VALUE(rv_result) TYPE zapp_d_no_lb_at_comma. 9 | 10 | 11 | "!

Is no lb after comma in function dep on sub function

12 | "! 13 | "! @parameter RV_RESULT |

Result

14 | METHODS is_no_lb_at_co_s_fu_dep_sfu 15 | RETURNING VALUE(rv_result) TYPE abap_bool. 16 | 17 | 18 | 19 | "!

Is no line break after comma in function depending on ) only

20 | "! 21 | "! @parameter RV_RESULT |

Result

22 | METHODS is_no_lb_at_co_s_fu_dep_cbr_o 23 | RETURNING VALUE(rv_result) TYPE abap_bool. 24 | 25 | 26 | "!

Is always line break after comma

27 | "! 28 | "! @parameter RV_RESULT |

Result

29 | METHODS is_always_line_break_aft_comma 30 | RETURNING VALUE(rv_result) TYPE abap_bool. 31 | 32 | 33 | "!

Is no lb after comma in function dep on sub fu and keyword

34 | "! 35 | "! @parameter RV_RESULT |

Result

36 | METHODS is_no_lb_at_co_s_fu_dep_sfu_kw 37 | RETURNING VALUE(rv_result) TYPE abap_bool. 38 | 39 | CONSTANTS: BEGIN OF cos_lb_rules_at_comma, 40 | always_line_break TYPE zapp_d_lb_after_comma_rule VALUE '0', 41 | no_line_break TYPE zapp_d_lb_after_comma_rule VALUE '1', 42 | dep_on_cls_bracket_only TYPE zapp_d_lb_after_comma_rule VALUE '2', 43 | dep_on_cls_bracket_and_sub_fu TYPE zapp_d_lb_after_comma_rule VALUE '3', 44 | dep_on_cls_br_sf_and_keywrd TYPE zapp_d_lb_after_comma_rule VALUE '4', 45 | END OF cos_lb_rules_at_comma. 46 | ENDINTERFACE. 47 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_new_line.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_new_line DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_rule_amdp_default_no_c 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | METHODS zif_app_rule~get_cur_row REDEFINITION. 8 | METHODS zif_app_rule~finalize_init REDEFINITION. 9 | METHODS zif_app_rule~get_cur_offset_start REDEFINITION. 10 | PROTECTED SECTION. 11 | 12 | PRIVATE SECTION. 13 | ENDCLASS. 14 | 15 | 16 | 17 | CLASS zcl_app_rule_amdp_new_line IMPLEMENTATION. 18 | 19 | METHOD zif_app_rule~get_cur_row. 20 | IF mv_cur_row_set = abap_true. 21 | rv_result = mv_cur_row. 22 | RETURN. 23 | ENDIF. 24 | 25 | rv_result = super->zif_app_rule~get_cur_row( ). 26 | IF is_logic_active( ) = abap_true 27 | AND mr_prev_rule IS NOT INITIAL. 28 | IF mr_prev_rule->get_cur_row( ) = rv_result. 29 | rv_result = rv_result + 1. 30 | ENDIF. 31 | ENDIF. 32 | 33 | zif_app_rule~set_cur_row( rv_result ). 34 | ENDMETHOD. 35 | 36 | 37 | METHOD zif_app_rule~get_cur_offset_start. 38 | 39 | IF mv_cur_offset_start_set = abap_true. 40 | rv_result = mv_cur_offset_start. 41 | RETURN. 42 | ENDIF. 43 | 44 | IF is_logic_active( ) = abap_false. 45 | rv_result = super->zif_app_rule~get_cur_offset_start( ). 46 | RETURN. 47 | ENDIF. 48 | 49 | IF has_prev_rule_same_type( ) = abap_false. 50 | rv_result = mv_default_line_indent. 51 | ELSE. 52 | rv_result = mr_prev_rule->get_new_line_indent( ). 53 | ENDIF. 54 | zcl_app_utilities=>set_to_0_if_negativ( CHANGING cv_value = rv_result ). 55 | rv_result = rv_result + mv_add_indent. 56 | zcl_app_utilities=>set_to_0_if_negativ( CHANGING cv_value = rv_result ). 57 | 58 | 59 | zif_app_rule~set_cur_offset_start( rv_result ). 60 | 61 | ENDMETHOD. 62 | METHOD zif_app_rule~finalize_init. 63 | super->zif_app_rule~finalize_init( ). 64 | 65 | IF is_logic_active( ) = abap_true. 66 | IF NOT mr_prev_rule IS INITIAL. 67 | IF mr_prev_rule->get_token_up( ) = '('. 68 | mv_logic_active = abap_false. 69 | ENDIF. 70 | ENDIF. 71 | ENDIF. 72 | 73 | ENDMETHOD. 74 | ENDCLASS. 75 | -------------------------------------------------------------------------------- /JAVA/zapp.pretty.printer/plugin.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 7 | 10 | 11 | 15 | 16 | 17 | 19 | 22 | 23 | 24 | 26 | 31 | 32 | 33 | 35 | 37 | 43 | 44 | 45 | 47 | 49 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /abap/src/zif_app_settings.intf.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZIF_APP_SETTINGS 7 | E 8 | AMDP Pretty Printer Settings 9 | 2 10 | 1 11 | X 12 | 13 | 14 | 15 | IS_ALWAYS_LINE_BREAK_AFT_COMMA 16 | E 17 | Is always line break after comma 18 | 19 | 20 | IS_LINE_BREAK_AFTER_COMMA_REQ 21 | E 22 | Is line break after comma required 23 | 24 | 25 | IS_NO_LB_AT_CO_S_FU_DEP_CBR_O 26 | E 27 | Is no line break after comma in function depending on ) only 28 | 29 | 30 | IS_NO_LB_AT_CO_S_FU_DEP_SFU 31 | E 32 | Is no lb after comma in function dep on sub function 33 | 34 | 35 | IS_NO_LB_AT_CO_S_FU_DEP_SFU_KW 36 | E 37 | Is no lb after comma in function dep on sub fu and keyword 38 | 39 | 40 | 41 | 42 | IS_ALWAYS_LINE_BREAK_AFT_COMMA 43 | RV_RESULT 44 | E 45 | Result 46 | 47 | 48 | IS_LINE_BREAK_AFTER_COMMA_REQ 49 | RV_RESULT 50 | E 51 | Result 52 | 53 | 54 | IS_NO_LB_AT_CO_S_FU_DEP_CBR_O 55 | RV_RESULT 56 | E 57 | Result 58 | 59 | 60 | IS_NO_LB_AT_CO_S_FU_DEP_SFU 61 | RV_RESULT 62 | E 63 | Result 64 | 65 | 66 | IS_NO_LB_AT_CO_S_FU_DEP_SFU_KW 67 | RV_RESULT 68 | E 69 | Result 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /abap/src/zapp_settings.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_SETTINGS 7 | E 8 | TRANSP 9 | AMDP Pretty Printer Settings 10 | X 11 | C 12 | 1 13 | 14 | 15 | ZAPP_SETTINGS 16 | A 17 | 0 18 | APPL2 19 | X 20 | X 21 | X 22 | 23 | 24 | 25 | UNAME 26 | X 27 | XUBNAME 28 | USR02 29 | 0 30 | X 31 | P 32 | E 33 | 34 | 35 | LB_AFTER_COMMA_RULE 36 | ZAPP_D_LB_AFTER_COMMA_RULE 37 | 0 38 | X 39 | F 40 | E 41 | 42 | 43 | 44 | 45 | UNAME 46 | SYST 47 | MANDT 48 | USR02 49 | MANDT 50 | 0001 51 | MANDT 52 | CLNT 53 | 54 | 55 | UNAME 56 | ZAPP_SETTINGS 57 | UNAME 58 | USR02 59 | BNAME 60 | 0002 61 | XUBNAME 62 | CHAR 63 | 64 | 65 | 66 | 67 | UNAME 68 | USR02 69 | KEY 70 | N 71 | X 72 | 1 73 | 74 | 75 | 76 | D 77 | 78 | 79 | 80 | D 81 | AMDP Pretty Printer Einstellungen 82 | 83 | 84 | 85 | 86 | ZAPP_SETTINGS 87 | &NC& 88 | 89 | 90 | 91 | 92 | 93 | -------------------------------------------------------------------------------- /abap/src/zapp_s_rule.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_S_RULE 7 | E 8 | INTTAB 9 | AMDP Pretty Printer Rule 10 | E 11 | 1 12 | 13 | 14 | 15 | RULE_NAME 16 | ZAPP_D_RULE 17 | 0 18 | E 19 | 20 | 21 | TOKEN 22 | ZAPP_D_TOKEN 23 | 0 24 | E 25 | 26 | 27 | CONTEXT 28 | ZAPP_D_CONTEXT 29 | 0 30 | E 31 | 32 | 33 | HL_CONTEXT 34 | ZAPP_D_HL_CONTEXT 35 | 0 36 | E 37 | 38 | 39 | SQLSCRIPT 40 | ZAPP_D_SQLSCRIPT 41 | 0 42 | X 43 | F 44 | E 45 | 46 | 47 | RULE_CLASS 48 | ZAPP_D_RULE_CLASS 49 | 0 50 | E 51 | 52 | 53 | ADD_INDENT 54 | ZAPP_D_ADDITIONAL_INDENT 55 | 0 56 | E 57 | 58 | 59 | RULE_COND_CLASS 60 | ZAPP_D_RULE_COND_CLASS 61 | 0 62 | E 63 | 64 | 65 | NEW_LINE_INDENT_DIFF 66 | ZAPP_D_NEW_LINE_INDENT_DIFF 67 | 0 68 | E 69 | 70 | 71 | NEW_STATEMENT_INDENT_DIFF 72 | ZAPP_D_NEW_STATEM_INDENT_DIFF 73 | 0 74 | E 75 | 76 | 77 | IS_NEW_LINE_REQ 78 | ZAPP_D_NEW_LINE_REQ 79 | 0 80 | X 81 | F 82 | E 83 | 84 | 85 | 86 | D 87 | 88 | 89 | 90 | D 91 | AMDP Pretty Printer Regel 92 | 93 | 94 | 95 | 96 | 97 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_by.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_by DEFINITION 2 | PUBLIC 3 | FINAL 4 | INHERITING FROM zcl_app_rule_amdp_default_no_c 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | METHODS zif_app_rule~finalize_init REDEFINITION. 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | METHODS is_on_select_level 12 | RETURNING VALUE(rv_result) TYPE abap_bool 13 | RAISING zcx_app_exception. 14 | 15 | METHODS adjust_prev_rule 16 | IMPORTING ir_open_bracket_rule TYPE REF TO zif_app_rule 17 | RAISING zcx_app_exception. 18 | ENDCLASS. 19 | 20 | 21 | 22 | CLASS zcl_app_rule_amdp_by IMPLEMENTATION. 23 | METHOD zif_app_rule~finalize_init. 24 | DATA lr_open_bracket_rule TYPE REF TO zif_app_rule. 25 | DATA lv_cur_offset_end TYPE i. 26 | 27 | IF is_comment( ) = abap_true 28 | OR mr_prev_rule IS INITIAL 29 | OR mr_prev_rule->is_comment( ) = abap_true 30 | OR mr_prev_rule->get_prev_rule( ) IS INITIAL 31 | OR is_on_select_level( ) = abap_true. 32 | super->zif_app_rule~finalize_init( ). 33 | RETURN. 34 | ENDIF. 35 | 36 | lr_open_bracket_rule = zcl_app_amdp_rule_utilities=>find_prev_open_bracket_rule( ir_start_rule = me ). 37 | IF lr_open_bracket_rule IS INITIAL. 38 | super->zif_app_rule~finalize_init( ). 39 | RETURN. 40 | ENDIF. 41 | 42 | adjust_prev_rule( lr_open_bracket_rule ). 43 | 44 | super->zif_app_rule~finalize_init( ). 45 | "respect the new line indent difference of the ORDER Rule at ORDER by for example 46 | lv_cur_offset_end = zif_app_rule~get_cur_offset_end( ). 47 | mr_rule_data->new_line_indent_diff = lv_cur_offset_end - mr_prev_rule->get_new_line_indent( ). 48 | 49 | ENDMETHOD. 50 | 51 | METHOD is_on_select_level. 52 | DATA lv_token TYPE zapp_d_token. 53 | DATA lt_token TYPE zapp_t_token. 54 | DATA lt_stop_token TYPE zapp_t_token. 55 | DATA lr_from_rule TYPE REF TO zif_app_rule. 56 | 57 | lv_token = 'UNION'. 58 | INSERT lv_token INTO TABLE lt_stop_token. 59 | 60 | lv_token = 'SELECT'. 61 | INSERT lv_token INTO TABLE lt_token. 62 | 63 | lr_from_rule = zcl_app_amdp_rule_utilities=>get_rule_in_stm_on_same_lvl_rw( 64 | EXPORTING 65 | ir_start_rule = me 66 | it_token = lt_token 67 | it_stop_token = lt_stop_token 68 | ). 69 | IF lr_from_rule IS NOT INITIAL. 70 | rv_result = abap_true. 71 | ENDIF. 72 | ENDMETHOD. 73 | 74 | METHOD adjust_prev_rule. 75 | 76 | DATA lv_prev_row TYPE i. 77 | IF mr_prev_rule->get_prev_rule( ) <> ir_open_bracket_rule. 78 | 79 | IF mr_prev_rule->get_prev_rule( )->get_cur_row( ) = mr_prev_rule->get_prev_rule( )->get_end_row( ). 80 | lv_prev_row = mr_prev_rule->get_prev_rule( )->get_end_row( ) + 1. 81 | ELSE. 82 | lv_prev_row = mr_prev_rule->get_prev_rule( )->get_end_row( ). 83 | 84 | ENDIF. 85 | 86 | mr_prev_rule->refresh_buffer( ). 87 | mr_prev_rule->set_cur_row( lv_prev_row ). 88 | mr_prev_rule->set_cur_offset_start( ir_open_bracket_rule->get_cur_offset_end( ) ). 89 | 90 | ENDIF. 91 | ENDMETHOD. 92 | 93 | ENDCLASS. 94 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_control_stru.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_control_stru DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_rule_amdp_new_line 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | METHODS zif_app_rule~finalize_init REDEFINITION. 8 | 9 | PROTECTED SECTION. 10 | PRIVATE SECTION. 11 | METHODS finalize_init_end. 12 | METHODS finalize_init_then. 13 | METHODS finalize_init_when. 14 | METHODS finalize_init_else. 15 | METHODS finalize_init_elseif. 16 | METHODS finalize_init_case. 17 | METHODS finalize_init_others 18 | RAISING zcx_app_exception. 19 | 20 | ENDCLASS. 21 | 22 | 23 | 24 | CLASS zcl_app_rule_amdp_control_stru IMPLEMENTATION. 25 | METHOD zif_app_rule~finalize_init. 26 | super->zif_app_rule~finalize_init( ). 27 | 28 | IF is_comment( ) = abap_false. "Set it also if no new line is required 29 | CASE zif_app_rule~get_token_up( ). 30 | WHEN 'CASE'. 31 | finalize_init_case( ). 32 | WHEN 'END'. 33 | finalize_init_end( ). 34 | WHEN 'THEN'. 35 | finalize_init_then( ). 36 | WHEN 'WHEN'. 37 | finalize_init_when( ). 38 | WHEN 'ELSE'. 39 | finalize_init_else( ). 40 | WHEN 'ELSEIF'. 41 | finalize_init_elseif( ). 42 | WHEN OTHERS. 43 | finalize_init_others( ). 44 | ENDCASE. 45 | ENDIF. 46 | ENDMETHOD. 47 | 48 | METHOD finalize_init_end. 49 | DATA lr_next_rule TYPE REF TO zif_app_rule. 50 | lr_next_rule = zif_app_rule~get_next_rule( ). 51 | mr_rule_data->add_indent = -4. 52 | mv_add_indent = mr_rule_data->add_indent. 53 | IF lr_next_rule IS NOT INITIAL. 54 | CASE lr_next_rule->get_token_up( ). 55 | WHEN 'IF' OR 'FOR' OR 'WHILE'. 56 | RETURN. 57 | ENDCASE. 58 | ENDIF. 59 | mr_rule_data->new_line_indent_diff = -4. 60 | mr_rule_data->new_statement_indent_diff = -4. 61 | ENDMETHOD. 62 | 63 | METHOD finalize_init_others. 64 | DATA lr_prev_rule TYPE REF TO zif_app_rule. 65 | 66 | lr_prev_rule = zif_app_rule~get_prev_rule( ). 67 | IF lr_prev_rule IS NOT INITIAL 68 | AND lr_prev_rule->get_token_up( ) = 'END' 69 | AND lr_prev_rule->is_end_of_statement( ) = abap_false. 70 | mr_rule_data->new_line_indent_diff = -4. 71 | mr_rule_data->new_statement_indent_diff = -4. 72 | mv_logic_active = abap_false. 73 | RETURN. 74 | ENDIF. 75 | 76 | mr_rule_data->new_line_indent_diff = 4. 77 | mr_rule_data->new_statement_indent_diff = 4. 78 | ENDMETHOD. 79 | 80 | METHOD finalize_init_then. 81 | mr_rule_data->is_new_line_req = abap_true. 82 | mv_logic_active = abap_false. 83 | ENDMETHOD. 84 | 85 | METHOD finalize_init_when. 86 | mr_rule_data->add_indent = -2. 87 | mv_add_indent = mr_rule_data->add_indent. 88 | ENDMETHOD. 89 | 90 | METHOD finalize_init_else. 91 | mr_rule_data->add_indent = -2. 92 | mv_add_indent = mr_rule_data->add_indent. 93 | mr_rule_data->is_new_line_req = abap_true. 94 | ENDMETHOD. 95 | 96 | METHOD finalize_init_elseif. 97 | mr_rule_data->add_indent = -2. 98 | mv_add_indent = mr_rule_data->add_indent. 99 | ENDMETHOD. 100 | 101 | METHOD finalize_init_case. 102 | mr_rule_data->new_line_indent_diff = 4. 103 | mr_rule_data->new_statement_indent_diff = 4. 104 | ENDMETHOD. 105 | 106 | ENDCLASS. 107 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_test/zcl_app_test_amdp.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_test_amdp DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | INTERFACES if_amdp_marker_hdb. 9 | 10 | CLASS-METHODS sel_data. 11 | 12 | CLASS-METHODS write_data. 13 | 14 | PROTECTED SECTION. 15 | PRIVATE SECTION. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS zcl_app_test_amdp IMPLEMENTATION. 21 | 22 | METHOD write_data. 23 | "Hello World 'test1' 'test2 24 | WRITE / 'Hello World'. "#EC CI_USE_WANTED "Comment 25 | 26 | ENDMETHOD. 27 | 28 | METHOD sel_data 29 | BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT 30 | "opt 31 | * sqlscript 32 | OPTIONS READ-ONLY 33 | USING spfli sflight. -- Flight 34 | declare lv_bla nvarchar(4); 35 | 36 | lt_sflight = select * from sflight; 37 | 38 | lt_carrid = select "CARRID" from sflight; 39 | 40 | lt_carrid2 = select "SFLIGHT"."CARRID" from sflight; 41 | 42 | lt_carrid2 = select DISTINCT "SFLIGHT"."CARRID" from sflight; 43 | 44 | lt_carrid3 = select max( concat( "SFLIGHT"."CARRID", connid ) )from sflight; 45 | 46 | lt_carrid4 = select max( case when carrid <> connid then connid else carrid end )from sflight; 47 | 48 | lt_carrid5 = select max( case when carrid <> connid then 49 | connid 50 | when carrid > connid then 51 | carrid 52 | else carrid 53 | end 54 | ) as max_value 55 | from sflight 56 | ORDER BY max_value asc; 57 | 58 | if IS_EMPTY ( :lt_carrid5 ) then 59 | return; 60 | elseif is_empty ( :lt_carrid4 ) then 61 | return; 62 | else 63 | return; 64 | end if; 65 | 66 | lt_spfli1 = SELECT carrid, connid, countryfr, countryto, 67 | ROW_NUMBER ( ) OVER( ORDER BY "CARRID", CONNID asc ) AS "ROW_ID" 68 | FROM SPFLI WHERE mandt = session_context( 'CLIENT' ); 69 | 70 | 71 | lt_spfli2 = SELECT carrid, connid, countryfr, countryto, 72 | ROW_NUMBER ( ) OVER( PARTITION BY carrid, connid ORDER BY "CARRID", CONNID asc ) AS "ROW_ID" 73 | FROM SPFLI WHERE mandt = session_context( 'CLIENT' ); 74 | 75 | *lt_test = select 'Bla Blup Data' from public.dummy; 76 | lt_test = select 'Bla Blup Data' from public.dummy; 77 | 78 | -- Hello World 'bla blub' 79 | lt_test2 = select 'Bla Blup Data' from public.dummy; /*test*/ 80 | 81 | /* test1 82 | test2 */ 83 | 84 | lt_test3 = select 'Bla Blup Data' from public.dummy; /*test */ 85 | 86 | lt_test3 = select 'Bla Blup Data' from public.dummy; -- test 87 | 88 | Lt_test4 = select carrid, connid, fldate 89 | from sflight 90 | where sflight.mandt = SESSION_CONTEXT('CLIENT') 91 | and sflight.connid = 'LH' union all 92 | select spfli.carrid, spfli.connid, sflight.FLDATE 93 | from spfli left outer join sflight 94 | on sflight.mandt = spfli.mandt 95 | and sflight.CARRID = spfli.carrid 96 | and sflight.CONNID = spfli.connid 97 | where spfli.mandt = SESSION_CONTEXT('CLIENT') 98 | and spfli.carrid = 'AB' union all 99 | select spfli.carrid, spfli.connid, sflight.FLDATE 100 | from spfli inner join sflight 101 | on sflight.mandt = spfli.mandt 102 | and sflight.CARRID = spfli.carrid 103 | and sflight.CONNID = spfli.connid 104 | where spfli.mandt = SESSION_CONTEXT('CLIENT') 105 | and spfli.carrid = 'AB'; 106 | 107 | lt_bla = SELECT RIGHT( carrid, 4 ) FROM sflight; 108 | --ENDMETHOD. 109 | ENDMETHOD. 110 | ENDCLASS. 111 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_clse_bracket.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_clse_bracket DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_rule_amdp_default_no_c 4 | 5 | CREATE PUBLIC . 6 | 7 | PUBLIC SECTION. 8 | METHODS zif_app_rule~get_cur_row REDEFINITION. 9 | METHODS zif_app_rule~get_cur_offset_start REDEFINITION. 10 | METHODS zif_app_rule~get_new_line_indent REDEFINITION. 11 | PROTECTED SECTION. 12 | PRIVATE SECTION. 13 | METHODS find_prev_open_bracket_rule 14 | RETURNING VALUE(rr_result) TYPE REF TO zif_app_rule 15 | RAISING zcx_app_exception . 16 | ENDCLASS. 17 | 18 | CLASS zcl_app_rule_amdp_clse_bracket IMPLEMENTATION. 19 | METHOD find_prev_open_bracket_rule. 20 | rr_result = zcl_app_amdp_rule_utilities=>find_prev_open_bracket_rule( ir_start_rule = me ). 21 | 22 | IF rr_result IS INITIAL. 23 | RAISE EXCEPTION TYPE zcx_app_exception 24 | MESSAGE ID 'ZAPP_MC_PRETTY_PRINT' 25 | TYPE 'E' 26 | NUMBER '011' 27 | WITH mr_rule_data->rule_name 28 | mr_token_ext->row 29 | mr_token_ext->col. 30 | ENDIF. 31 | ENDMETHOD. 32 | 33 | METHOD zif_app_rule~get_cur_row. 34 | DATA lr_open_bracket_rule TYPE REF TO zcl_app_rule_amdp_opn_bracket. 35 | 36 | IF mv_cur_row_set = abap_true. 37 | rv_result = mv_cur_row. 38 | RETURN. 39 | ENDIF. 40 | 41 | rv_result = super->zif_app_rule~get_cur_row( ). 42 | 43 | IF is_logic_active( ) = abap_false. 44 | RETURN. 45 | ENDIF. 46 | 47 | lr_open_bracket_rule ?= find_prev_open_bracket_rule( ). 48 | IF lr_open_bracket_rule->zif_app_rule~get_end_row( ) < rv_result 49 | AND mr_prev_rule->get_cur_row( ) = rv_result 50 | AND lr_open_bracket_rule->get_mv_special_logic( ) <> zif_app_amdp_rule_definitions=>cos_open_bracket_special_logic-call_statement. 51 | rv_result = rv_result + 1. 52 | ENDIF. 53 | 54 | zif_app_rule~set_cur_row( rv_result ). 55 | ENDMETHOD. 56 | 57 | METHOD zif_app_rule~get_cur_offset_start. 58 | DATA lr_open_bracket_rule TYPE REF TO zcl_app_rule_amdp_opn_bracket. 59 | 60 | IF mv_cur_offset_start_set = abap_true. 61 | rv_result = mv_cur_offset_start. 62 | RETURN. 63 | ENDIF. 64 | 65 | IF is_logic_active( ) = abap_false. 66 | rv_result = super->zif_app_rule~get_cur_offset_start( ). 67 | RETURN. 68 | ENDIF. 69 | 70 | lr_open_bracket_rule ?= find_prev_open_bracket_rule( ). 71 | IF lr_open_bracket_rule->get_mv_special_logic( ) <> zif_app_amdp_rule_definitions=>cos_open_bracket_special_logic-call_statement 72 | AND lr_open_bracket_rule->zif_app_rule~get_end_row( ) <> zif_app_rule~get_cur_row( ). 73 | rv_result = lr_open_bracket_rule->zif_app_rule~get_cur_offset_start( ) + mv_add_indent. 74 | zif_app_rule~set_cur_offset_start( rv_result ). 75 | ELSE. 76 | rv_result = super->zif_app_rule~get_cur_offset_start( ). 77 | ENDIF. 78 | 79 | ENDMETHOD. 80 | 81 | METHOD zif_app_rule~get_new_line_indent. 82 | DATA lr_rule TYPE REF TO zif_app_rule. 83 | 84 | IF is_logic_active( ) = abap_false OR zif_app_rule~is_end_of_statement( ) = abap_true. 85 | rv_result = super->zif_app_rule~get_new_line_indent( ). 86 | RETURN. 87 | ENDIF. 88 | 89 | lr_rule = find_prev_open_bracket_rule( ). 90 | IF lr_rule->get_prev_rule( ) IS INITIAL. 91 | rv_result = mv_default_line_indent. 92 | ELSE. 93 | rv_result = lr_rule->get_prev_rule( )->get_new_line_indent( ). 94 | ENDIF. 95 | ENDMETHOD. 96 | 97 | ENDCLASS. 98 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zcl_app_rule_factory.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_factory DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | METHODS constructor 9 | IMPORTING ir_settings TYPE REF TO zif_app_settings 10 | RAISING zcx_app_exception. 11 | 12 | METHODS get_rule 13 | IMPORTING ir_t_source TYPE REF TO sourcetable 14 | ir_t_statement TYPE REF TO sstmnt_tab 15 | ir_t_structure TYPE REF TO sstruc_tab 16 | ir_prev_rule TYPE REF TO zif_app_rule 17 | ir_token_ext TYPE REF TO zapp_s_stokesx_ext 18 | RETURNING VALUE(rr_result) TYPE REF TO zif_app_rule 19 | RAISING zcx_app_exception. 20 | 21 | PROTECTED SECTION. 22 | PRIVATE SECTION. 23 | DATA mr_rule_finder TYPE REF TO zif_app_rule_finder. 24 | DATA mr_settings TYPE REF TO zif_app_settings. 25 | 26 | METHODS get_rule_search 27 | IMPORTING 28 | ir_token_ext TYPE REF TO zapp_s_stokesx_ext 29 | ir_prev_rule TYPE REF TO zif_app_rule OPTIONAL 30 | RETURNING VALUE(rs_result) TYPE zapp_s_rule_search 31 | RAISING zcx_app_exception. 32 | ENDCLASS. 33 | 34 | 35 | 36 | CLASS zcl_app_rule_factory IMPLEMENTATION. 37 | 38 | 39 | METHOD constructor. 40 | 41 | CREATE OBJECT mr_rule_finder TYPE zcl_app_rule_finder. 42 | mr_settings = ir_settings. 43 | ENDMETHOD. 44 | 45 | 46 | METHOD get_rule. 47 | DATA lr_rule_data TYPE REF TO zapp_s_rule. 48 | DATA ls_rule_search TYPE zapp_s_rule_search. 49 | DATA lr_rule_data_new TYPE REF TO zapp_s_rule. 50 | 51 | 52 | ls_rule_search = get_rule_search( 53 | ir_token_ext = ir_token_ext 54 | ir_prev_rule = ir_prev_rule ). 55 | 56 | lr_rule_data = mr_rule_finder->get_rule_data( is_rule_search = ls_rule_search ). 57 | 58 | IF lr_rule_data->rule_class IS INITIAL. 59 | RAISE EXCEPTION TYPE zcx_app_exception 60 | MESSAGE ID 'ZAPP_MC_PRETTY_PRINT' 61 | TYPE 'E' 62 | NUMBER '006' 63 | WITH 64 | lr_rule_data->rule_name. 65 | ENDIF. 66 | 67 | CREATE OBJECT rr_result TYPE (lr_rule_data->rule_class). 68 | 69 | CREATE DATA lr_rule_data_new. 70 | 71 | lr_rule_data_new->* = lr_rule_data->*. 72 | 73 | IF ir_prev_rule IS INITIAL. 74 | rr_result->init( 75 | EXPORTING 76 | ir_token_ext = ir_token_ext 77 | ir_t_source = ir_t_source 78 | ir_t_statement = ir_t_statement 79 | ir_t_structure = ir_t_structure 80 | ir_rule_data = lr_rule_data_new 81 | ir_settings = mr_settings ). 82 | ELSE. 83 | 84 | rr_result->init( 85 | EXPORTING 86 | ir_token_ext = ir_token_ext 87 | ir_t_source = ir_t_source 88 | ir_t_statement = ir_t_statement 89 | ir_t_structure = ir_t_structure 90 | ir_rule_data = lr_rule_data_new 91 | ir_settings = mr_settings 92 | ir_context_rule = ir_prev_rule->get_new_context_rule( ) 93 | ir_hl_context_rule = ir_prev_rule->get_new_hl_context_rule( ) 94 | ir_prev_rule = ir_prev_rule ). 95 | ENDIF. 96 | ENDMETHOD. 97 | 98 | 99 | METHOD get_rule_search. 100 | rs_result-token = ir_token_ext->str_up. 101 | rs_result-sqlscript = ir_token_ext->sqlscript. 102 | IF ir_prev_rule IS NOT INITIAL. 103 | rs_result-context = ir_prev_rule->get_new_context( ). 104 | rs_result-hl_context = ir_prev_rule->get_new_hl_context( ). 105 | ENDIF. 106 | ENDMETHOD. 107 | ENDCLASS. 108 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_abap/zcl_app_rule_abap_dummy.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_abap_dummy DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_base_rule 4 | 5 | FINAL 6 | CREATE PUBLIC . 7 | 8 | PUBLIC SECTION. 9 | METHODS zif_app_rule~get_cur_offset_start REDEFINITION. 10 | METHODS zif_app_rule~get_cur_row REDEFINITION. 11 | METHODS zif_app_rule~get_text REDEFINITION. 12 | METHODS zif_app_rule~init REDEFINITION. 13 | METHODS zif_app_rule~finalize_init REDEFINITION. 14 | PROTECTED SECTION. 15 | PRIVATE SECTION. 16 | ENDCLASS. 17 | 18 | 19 | 20 | CLASS zcl_app_rule_abap_dummy IMPLEMENTATION. 21 | 22 | METHOD zif_app_rule~get_cur_offset_start. 23 | rv_result = mr_token_ext->col. 24 | ENDMETHOD. 25 | 26 | 27 | METHOD zif_app_rule~get_cur_row. 28 | DATA lr_token_ext_prev TYPE REF TO zapp_s_stokesx_ext. 29 | IF mr_prev_rule IS INITIAL. 30 | rv_result = mr_token_ext->row. 31 | RETURN. 32 | ENDIF. 33 | 34 | lr_token_ext_prev = mr_prev_rule->get_token_ext( ). 35 | IF zcl_app_utilities=>is_abap_token( lr_token_ext_prev->sqlscript ) = abap_true. 36 | 37 | rv_result = mr_prev_rule->get_end_row( ). 38 | 39 | ELSE. 40 | IF mr_prev_rule->has_multline_delimiter( ) = abap_true. 41 | rv_result = mr_prev_rule->get_end_row( ). 42 | ELSE. 43 | rv_result = mr_prev_rule->get_end_row( ) + 1. 44 | ENDIF. 45 | ENDIF. 46 | 47 | ENDMETHOD. 48 | 49 | METHOD zif_app_rule~get_text. 50 | DATA lr_delimiter TYPE REF TO string. 51 | DATA lr_result TYPE REF TO string. 52 | IF mr_token_ext->delimiter_org IS INITIAL. 53 | INSERT mr_token_ext->str_org INTO TABLE rt_result. 54 | RETURN. 55 | ENDIF. 56 | LOOP AT mr_token_ext->delimiter_org REFERENCE INTO lr_delimiter. 57 | INSERT INITIAL LINE INTO TABLE rt_result REFERENCE INTO lr_result. 58 | IF sy-tabix = 1. 59 | CONCATENATE mr_token_ext->str_org lr_delimiter->* INTO lr_result->*. 60 | ELSE. 61 | lr_result->* = lr_delimiter->*. 62 | ENDIF. 63 | ENDLOOP. 64 | ENDMETHOD. 65 | 66 | METHOD zif_app_rule~init. 67 | IF zcl_app_utilities=>is_abap_token( ir_token_ext->sqlscript ) = abap_false. 68 | RAISE EXCEPTION TYPE zcx_app_exception 69 | MESSAGE ID 'ZAPP_MC_PRETTY_PRINT' 70 | TYPE 'E' 71 | NUMBER '009' 72 | WITH ir_rule_data->rule_name. 73 | 74 | ENDIF. 75 | super->zif_app_rule~init( 76 | EXPORTING 77 | ir_token_ext = ir_token_ext 78 | ir_t_source = ir_t_source 79 | ir_t_statement = ir_t_statement 80 | ir_t_structure = ir_t_structure 81 | ir_rule_data = ir_rule_data 82 | ir_context_rule = ir_context_rule 83 | ir_hl_context_rule = ir_hl_context_rule 84 | ir_prev_rule = ir_prev_rule 85 | ir_settings = ir_settings ). 86 | 87 | ENDMETHOD. 88 | 89 | METHOD zif_app_rule~finalize_init. 90 | DATA lr_delimiter TYPE REF TO string. 91 | IF mr_token_ext->sqlscript = zcl_app_scanner_sqlscript=>cos_sqlscript-end_of_pending 92 | AND lines( mr_token_ext->delimiter_org ) > 1. 93 | 94 | READ TABLE mr_token_ext->delimiter_org REFERENCE INTO lr_delimiter 95 | INDEX ( lines( mr_token_ext->delimiter_org ) ). 96 | IF sy-subrc = 0. 97 | IF lr_delimiter->* IS INITIAL OR lr_delimiter->* CO ` `. 98 | CLEAR lr_delimiter->*. 99 | ELSE. 100 | INSERT INITIAL LINE INTO TABLE mr_token_ext->delimiter_org. 101 | ENDIF. 102 | ENDIF. 103 | ENDIF. 104 | 105 | ENDMETHOD. 106 | 107 | ENDCLASS. 108 | -------------------------------------------------------------------------------- /doc/how_does_it_work/README.md: -------------------------------------------------------------------------------- 1 | # How does it work (technical) 2 | 3 | ## General 4 | 5 | The AMDP Pretty Printer consists like the SAP ABAP Development Tools of 6 | a Rest Service in the SAP Development System that contains the Pretty 7 | Printer logic and an Eclipse Plugin that calls the Rest Service and 8 | adjust the coding. The SAP ADT SDK is used for the adjustment of the 9 | coding and the communication with the SAP Backend. 10 | 11 | The AMDP Pretty Printer adjusts only the content of the AMDP methods. It 12 | doesn’t format the ABAP source code. 13 | 14 | ## The SAP backend logic 15 | 16 | The Eclipse Plugin sends a post request to the URL 17 | /sap/bc/adt/zapp/zapp_pretty_printer of your SAP Development System. 18 | This Rest Service is provided by an implementation of the BADI 19 | BADI_ADT_REST_RFC_APPLICATION (Enhancement Implementation 20 | ZAPP_ADT_PRETTY_PRINTER). It calls the formatting logic. 21 | 22 | The formatting logic is stored in the package $APP_PRETTY_PRINTER. The 23 | entry point is the method ZCL_APP_PRETTY_PRINTER-\>PRETTY_PRINT. 24 | 25 | It calls the scanner class ZCL_APP_SCANNER to scan the source code, 26 | determines the rules and applies them on the source code to format it. 27 | The rules will be applied up to 11 times, because it could be that there 28 | are dependencies between the rules. The rules will be created by the 29 | class ZCL_APP_RULE_FACTORY. 30 | 31 | ### Scanner logic 32 | 33 | The source code will be scanned by the class ZCL_APP_SCANNER. Scan means 34 | that it calls the SAP internal command SCAN ABAP-SOURCE to tokenize the 35 | source code. This command is also used by the SAP Standard ABAP Pretty 36 | Printer. The command returns the tokens in a way that it cannot be used 37 | by the rules. Hence, there are several methods that adjust the tokens that 38 | the can be used for the AMDP Pretty Printer. The scanner logic also 39 | determines if a token belongs to a comment and what kind of comment it 40 | is (class ZCL_APP_SCANNER_COMMENT). Additional it determines if the 41 | token belongs to the AMDP method content (class 42 | ZCL_APP_SCANNER_SQLSCRIPT). Therefore, the scanner searches for the 43 | keyword SQLSCRIPT that is not part of a commend and part of the METHOD 44 | command. The source code after the dot of the METHOD command until the 45 | ENDMETHOD command will be formatted by the AMDP Pretty Printer rules. 46 | The rest will be copied 1:1 by the ABAP rule. 47 | 48 | Additional there is the class ZCL_APP_SCANNER_DELIMITER it scans the 49 | delimiter (for example spaces) between the tokens that the command SCAN 50 | ABAP-SOURCE returns. If the user enters empty rows in the source code, 51 | then they will be part of the delimiter and the rules normally will keep 52 | them alive in the result of the formatting. 53 | 54 | ### The rules 55 | 56 | The rules will be provided by the class ZCL_APP_RULE_PROVIDER. They are 57 | not defined in a customizing table to deploy the AMDP Pretty Printer 58 | with abapGit. It doesn’t support table content until now. 59 | 60 | All rules implement the interface ZIF_APP_RULE and inherit from the 61 | class ZCL_APP_BASE_RULE. 62 | 63 | The class ZCL_APP_RULE_FINDER searches the rules for the tokens. On each 64 | token will be only the first found rule be applied. It uses the 65 | following access sequence: 66 | 67 | 1. Full specified (Token, Context, Higher Level Context, SQLSCRIPT) 68 | 69 | 2. With context (Token, Context, SQLSCRIPT) 70 | 71 | 3. Without Token (Context, Higher Level Context, SQLSCRIPT) 72 | 73 | 4. With Token (Token, SQLSCRIPT) 74 | 75 | 5. Default (SQLSCRIPT) 76 | 77 | Hint: Currently all rules have no context. The context could be defined 78 | by a previous rule. 79 | 80 | All rules can be found in the package $APP_PRETTY_PRINTER_RULES and 81 | below. 82 | -------------------------------------------------------------------------------- /abap/src/zapp_s_stokesx_ext.tabl.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_S_STOKESX_EXT 7 | E 8 | INTTAB 9 | Extended STOKESX 10 | E 11 | 1 12 | 13 | 14 | 15 | STR 16 | 0 17 | g 18 | 000008 19 | STRG 20 | STRG 21 | Token sequence 22 | 23 | 24 | ROW 25 | TOKEN_ROW 26 | 0 27 | E 28 | 29 | 30 | COL 31 | TOKEN_COL 32 | 0 33 | E 34 | 35 | 36 | LEN 37 | TOKEN_LEN1 38 | 0 39 | E 40 | 41 | 42 | TYPE 43 | TOKEN_TYPE 44 | 0 45 | E 46 | 47 | 48 | ORG_TAB_ROW 49 | ZAPP_D_ORG_TAB_ROW 50 | 0 51 | E 52 | 53 | 54 | SQLSCRIPT 55 | ZAPP_D_SQLSCRIPT 56 | 0 57 | X 58 | F 59 | E 60 | 61 | 62 | COMMENT 63 | ZAPP_D_COMMENT 64 | 0 65 | X 66 | F 67 | E 68 | 69 | 70 | COMMENT_DETAIL 71 | ZAPP_D_COMMENT_DETAIL 72 | 0 73 | X 74 | F 75 | E 76 | 77 | 78 | DELIMITER 79 | ZAPP_T_DELIMITER 80 | 0 81 | TTYP 82 | TTYPL 83 | L 84 | 85 | 86 | DELIMITER_ORG 87 | ZAPP_T_DELIMITER 88 | 0 89 | TTYP 90 | TTYPL 91 | L 92 | 93 | 94 | STR_UP 95 | ZAPP_D_TOKEN 96 | 0 97 | E 98 | 99 | 100 | STR_ORG 101 | ZAPP_D_TOKEN 102 | 0 103 | E 104 | 105 | 106 | 107 | D 108 | 109 | 110 | 111 | D 112 | Erweiteter STOKESX 113 | 114 | 115 | 116 | 117 | 118 | -------------------------------------------------------------------------------- /abap/src/zcl_app_scanner.clas.testclasses.abap: -------------------------------------------------------------------------------- 1 | *"* use this source file for your ABAP unit test classes 2 | CLASS lcl_test DEFINITION FINAL FOR TESTING 3 | DURATION SHORT 4 | RISK LEVEL HARMLESS. 5 | 6 | PRIVATE SECTION. 7 | METHODS: 8 | scan_test FOR TESTING RAISING cx_static_check. 9 | ENDCLASS. 10 | 11 | 12 | CLASS lcl_test IMPLEMENTATION. 13 | 14 | METHOD scan_test. 15 | 16 | DATA lt_source TYPE sourcetable. 17 | DATA lr_cut TYPE REF TO zcl_app_scanner. 18 | DATA lr_ex TYPE REF TO zcx_app_exception. 19 | 20 | lt_source = VALUE #( ( |CLASS zcl_app_test_amdp DEFINITION| ) 21 | ( | PUBLIC| ) 22 | ( | FINAL| ) 23 | ( | CREATE PUBLIC .| ) 24 | ( || ) 25 | ( | PUBLIC SECTION.| ) 26 | ( || ) 27 | ( | INTERFACES if_amdp_marker_hdb.| ) 28 | ( || ) 29 | ( | CLASS-METHODS sel_data.| ) 30 | ( || ) 31 | ( | CLASS-METHODS write_data.| ) 32 | ( || ) 33 | ( | PROTECTED SECTION.| ) 34 | ( | PRIVATE SECTION.| ) 35 | ( |ENDCLASS.| ) 36 | ( || ) 37 | ( || ) 38 | ( || ) 39 | ( |CLASS zcl_app_test_amdp IMPLEMENTATION.| ) 40 | ( || ) 41 | ( | METHOD write_data.| ) 42 | ( | "Hello World 'keine Ahnung' 'bla| ) 43 | ( | WRITE / 'Hello World'. "Kommentar| ) 44 | ( | ENDMETHOD.| ) 45 | ( || ) 46 | ( | METHOD sel_data| ) 47 | ( | BY DATABASE PROCEDURE FOR HDB LANGUAGE SQLSCRIPT| ) 48 | ( | "opt| ) 49 | ( |* sqlscript| ) 50 | ( | OPTIONS READ-ONLY| ) 51 | ( | USING sflight. -- Flight| ) 52 | ( || ) 53 | ( | lt_sflight = select * from sflight;| ) 54 | ( || ) 55 | ( | lt_carrid = select "CARRID" from sflight;| ) 56 | ( || ) 57 | ( | lt_carrid2 = select "SFLIGHT"."CARRID" from sflight;| ) 58 | ( || ) 59 | ( |*lt_test = select 'Bla Blup Data' from public.dummy;| ) 60 | ( | lt_test = select 'Bla Blup Data' from public.dummy;| ) 61 | ( || ) 62 | ( | -- Hello World 'keine Ahnung' 'bla blub'| ) 63 | ( | lt_test2 = select 'Bla Blup Data' from public.dummy; /*schaun mer mal */| ) 64 | ( || ) 65 | ( | /* schaun mer| ) 66 | ( | noch mehr */| ) 67 | ( || ) 68 | ( | lt_test3 = select 'Bla Blup Data' from public.dummy; /*schaun mer mal */| ) 69 | ( || ) 70 | ( | lt_test3 = select 'Bla Blup Data' from public.dummy; -- schaun mer mal| ) 71 | ( || ) 72 | ( | --ENDMETHOD.| ) 73 | ( | ENDMETHOD.| ) 74 | ( |ENDCLASS.| ) ). 75 | 76 | CREATE OBJECT lr_cut. 77 | TRY. 78 | lr_cut->scan( 79 | EXPORTING 80 | it_source = lt_source 81 | ). 82 | CATCH zcx_app_exception INTO lr_ex. 83 | cl_abap_unit_assert=>fail( lr_ex->get_text( ) ). 84 | ENDTRY. 85 | "cl_abap_unit_assert=>fail( 'Implement your first test here' ). 86 | ENDMETHOD. 87 | 88 | ENDCLASS. 89 | -------------------------------------------------------------------------------- /abap/src/zapp_mc_pretty_print.msag.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZAPP_MC_PRETTY_PRINT 7 | E 8 | Message Class Pretty Printer 9 | 10 | 11 | 12 | E 13 | ZAPP_MC_PRETTY_PRINT 14 | 001 15 | Error during source code scanning 16 | 17 | 18 | E 19 | ZAPP_MC_PRETTY_PRINT 20 | 003 21 | No statement found for token & 22 | 23 | 24 | E 25 | ZAPP_MC_PRETTY_PRINT 26 | 004 27 | Token & not found in source row & 28 | 29 | 30 | E 31 | ZAPP_MC_PRETTY_PRINT 32 | 005 33 | No rule found for token & context & HL context & SQLSCRIPT & 34 | 35 | 36 | E 37 | ZAPP_MC_PRETTY_PRINT 38 | 006 39 | No class definied for rule & 40 | 41 | 42 | E 43 | ZAPP_MC_PRETTY_PRINT 44 | 007 45 | Could not add rule & token & row & col & to source. It is already set 46 | 47 | 48 | E 49 | ZAPP_MC_PRETTY_PRINT 50 | 008 51 | Could not add rule & token & row & col & to source. Line already created 52 | 53 | 54 | E 55 | ZAPP_MC_PRETTY_PRINT 56 | 009 57 | The rule & is no SQLSCRIPT rule 58 | 59 | 60 | E 61 | ZAPP_MC_PRETTY_PRINT 62 | 010 63 | No closing bracket found rule & row & col & 64 | 65 | 66 | E 67 | ZAPP_MC_PRETTY_PRINT 68 | 011 69 | No open bracket found rule & row & col & 70 | 71 | 72 | E 73 | ZAPP_MC_PRETTY_PRINT 74 | 012 75 | Could not correct token & length 0 row & col & 76 | 77 | 78 | E 79 | ZAPP_MC_PRETTY_PRINT 80 | 013 81 | Pretty print result calculated 10 times with differences (not stable) 82 | 83 | 84 | E 85 | ZAPP_MC_PRETTY_PRINT 86 | 014 87 | No 'FROM' token found for Select rule & row & col & 88 | 89 | 90 | E 91 | ZAPP_MC_PRETTY_PRINT 92 | 015 93 | The logic of the rule & is not active 94 | 95 | 96 | E 97 | ZAPP_MC_PRETTY_PRINT 98 | 016 99 | Settings saved. 100 | 101 | 102 | E 103 | ZAPP_MC_PRETTY_PRINT 104 | 017 105 | Error during saving settings. 106 | 107 | 108 | E 109 | ZAPP_MC_PRETTY_PRINT 110 | 018 111 | Settings deleted. 112 | 113 | 114 | E 115 | ZAPP_MC_PRETTY_PRINT 116 | 019 117 | Could not correct sql comment token & length 0 row & col & 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_opn_bracket.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_opn_bracket DEFINITION 2 | PUBLIC 3 | INHERITING FROM zcl_app_rule_amdp_default_no_c 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | METHODS zif_app_rule~get_new_line_indent REDEFINITION. 8 | METHODS zif_app_rule~finalize_init REDEFINITION. 9 | METHODS zif_app_rule~get_cur_row REDEFINITION. 10 | METHODS zif_app_rule~is_new_line_req REDEFINITION. 11 | METHODS get_mv_special_logic RETURNING VALUE(rv_result) TYPE zapp_d_spec_bracket_logic. 12 | 13 | PROTECTED SECTION. 14 | PRIVATE SECTION. 15 | DATA mv_special_logic TYPE zapp_d_spec_bracket_logic. 16 | METHODS is_new_line_req_for_call_statm 17 | RETURNING VALUE(rv_result) TYPE abap_bool 18 | RAISING zcx_app_exception . 19 | ENDCLASS. 20 | 21 | 22 | 23 | CLASS zcl_app_rule_amdp_opn_bracket IMPLEMENTATION. 24 | 25 | METHOD zif_app_rule~get_new_line_indent. 26 | 27 | 28 | IF is_logic_active( ) = abap_true. 29 | 30 | IF mv_special_logic = zif_app_amdp_rule_definitions=>cos_open_bracket_special_logic-call_statement. 31 | rv_result = mr_prev_rule->get_prev_rule( )->get_cur_offset_end( ) + 4. 32 | ELSE. 33 | rv_result = zif_app_rule~get_cur_offset_end( ). 34 | ENDIF. 35 | ELSE. 36 | rv_result = super->zif_app_rule~get_new_line_indent( ). 37 | ENDIF. 38 | ENDMETHOD. 39 | 40 | 41 | METHOD zif_app_rule~get_cur_row. 42 | 43 | IF mv_cur_row_set = abap_true. 44 | rv_result = mv_cur_row. 45 | RETURN. 46 | ENDIF. 47 | 48 | rv_result = super->zif_app_rule~get_cur_row( ). 49 | 50 | IF is_logic_active( ) = abap_false OR mr_prev_rule IS INITIAL. 51 | RETURN. 52 | ENDIF. 53 | 54 | IF mr_prev_rule->get_token_up( ) = zif_app_rule~get_token_up( ). 55 | rv_result = rv_result + 1. 56 | zif_app_rule~set_cur_row( rv_result ). 57 | ENDIF. 58 | 59 | ENDMETHOD. 60 | 61 | METHOD zif_app_rule~finalize_init. 62 | DATA lr_delimiter TYPE REF TO string. 63 | super->zif_app_rule~finalize_init( ). 64 | 65 | IF is_logic_active( ) = abap_false. 66 | RETURN. 67 | ENDIF. 68 | 69 | READ TABLE mr_token_ext->delimiter 70 | REFERENCE INTO lr_delimiter 71 | INDEX 1 . 72 | IF sy-subrc <> 0. 73 | RETURN. 74 | ENDIF. 75 | 76 | IF strlen( lr_delimiter->* ) = 0. 77 | RETURN. 78 | ENDIF. 79 | 80 | IF lr_delimiter->* CO ` `. 81 | mr_token_ext->delimiter = zcl_app_utilities=>get_space_as_delimiter( ). 82 | ENDIF. 83 | 84 | IF mr_prev_rule IS NOT INITIAL 85 | AND mr_prev_rule->get_prev_rule( ) IS NOT INITIAL 86 | AND mr_prev_rule->get_prev_rule( )->get_token_up( ) = 'CALL'. 87 | mv_special_logic = zif_app_amdp_rule_definitions=>cos_open_bracket_special_logic-call_statement. 88 | ENDIF. 89 | 90 | ENDMETHOD. 91 | 92 | METHOD zif_app_rule~is_new_line_req. 93 | 94 | rv_result = super->zif_app_rule~is_new_line_req( ). 95 | 96 | IF rv_result = abap_true. 97 | RETURN. 98 | ENDIF. 99 | 100 | 101 | IF mv_special_logic = zif_app_amdp_rule_definitions=>cos_open_bracket_special_logic-call_statement. 102 | rv_result = is_new_line_req_for_call_statm( ). 103 | ENDIF. 104 | ENDMETHOD. 105 | 106 | METHOD get_mv_special_logic. 107 | rv_result = me->mv_special_logic. 108 | ENDMETHOD. 109 | 110 | METHOD is_new_line_req_for_call_statm. 111 | DATA lr_rule TYPE REF TO zif_app_rule. 112 | DATA lv_counter_next_open_bracket TYPE i. 113 | 114 | lr_rule = me. 115 | DO. 116 | lr_rule = lr_rule->get_next_rule( ). 117 | IF lr_rule IS INITIAL. 118 | RETURN. 119 | ENDIF. 120 | IF zcl_app_utilities=>is_sqlscript_rule( lr_rule ) = abap_false. 121 | RETURN. 122 | ENDIF. 123 | 124 | IF lr_rule->is_end_of_statement( ) = abap_true. 125 | RETURN. 126 | ENDIF. 127 | 128 | IF lr_rule->is_comment( ) = abap_true. 129 | CONTINUE. 130 | ENDIF. 131 | 132 | IF lr_rule->is_line_breaking_token( ) = abap_true. 133 | rv_result = abap_true. 134 | RETURN. 135 | ENDIF. 136 | 137 | CASE lr_rule->get_token_up( ). 138 | WHEN ')'. 139 | 140 | IF lv_counter_next_open_bracket = 0. 141 | RETURN. 142 | ENDIF. 143 | lv_counter_next_open_bracket = lv_counter_next_open_bracket - 1. 144 | WHEN '('. 145 | lv_counter_next_open_bracket = lv_counter_next_open_bracket + 1. 146 | ENDCASE. 147 | ENDDO. 148 | 149 | ENDMETHOD. 150 | 151 | ENDCLASS. 152 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_amdp_rule_utilities.clas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | ZCL_APP_AMDP_RULE_UTILITIES 7 | E 8 | Rule Utilities 9 | 1 10 | X 11 | X 12 | X 13 | 14 | 15 | 16 | AVOID_LB_AFTER_COMMA_IN_FUNC 17 | E 18 | Avoid line break after comma in function 19 | 20 | 21 | CONTAINS_FUNCTION_LB_EXCEPTION 22 | E 23 | Contains Function Select Statement 24 | 25 | 26 | CONTAINS_FU_KW_OR_SFU_W_COMMA 27 | E 28 | Contains function keywords or sub func. with comma 29 | 30 | 31 | CONTAINS_FU_SUB_FU_W_COMMA 32 | E 33 | Contains function sub func. with comma 34 | 35 | 36 | IS_AVD_LB_AFT_COMMA_IN_FU_ACT 37 | E 38 | Is avoid line break after comma in function active 39 | 40 | 41 | IS_CLS_BRA_OF_FU_IN_SAME_LINE 42 | E 43 | Is closing bracket of function original in the same line 44 | 45 | 46 | 47 | 48 | AVOID_LB_AFTER_COMMA_IN_FUNC 49 | IR_START_RULE 50 | E 51 | Start rule must be function name before the bracket 52 | 53 | 54 | CONTAINS_FUNCTION_LB_EXCEPTION 55 | IR_START_RULE 56 | E 57 | Start rule must be function name before the bracket 58 | 59 | 60 | CONTAINS_FUNCTION_LB_EXCEPTION 61 | RV_RESULT 62 | E 63 | Result 64 | 65 | 66 | CONTAINS_FU_KW_OR_SFU_W_COMMA 67 | IR_START_RULE 68 | E 69 | Start rule must be function name before the bracket 70 | 71 | 72 | CONTAINS_FU_KW_OR_SFU_W_COMMA 73 | RV_RESULT 74 | E 75 | Result 76 | 77 | 78 | CONTAINS_FU_SUB_FU_W_COMMA 79 | IR_START_RULE 80 | E 81 | Start rule must be function name before the bracket 82 | 83 | 84 | CONTAINS_FU_SUB_FU_W_COMMA 85 | RV_RESULT 86 | E 87 | Result 88 | 89 | 90 | IS_AVD_LB_AFT_COMMA_IN_FU_ACT 91 | IR_SETTINGS 92 | E 93 | AMDP Pretty Printer Settings 94 | 95 | 96 | IS_AVD_LB_AFT_COMMA_IN_FU_ACT 97 | IR_START_RULE 98 | E 99 | Pretty Printer Rule 100 | 101 | 102 | IS_AVD_LB_AFT_COMMA_IN_FU_ACT 103 | RV_RESULT 104 | E 105 | Result 106 | 107 | 108 | IS_CLS_BRA_OF_FU_IN_SAME_LINE 109 | IR_START_RULE 110 | E 111 | Start rule must be function name before the bracket 112 | 113 | 114 | IS_CLS_BRA_OF_FU_IN_SAME_LINE 115 | RV_RESULT 116 | E 117 | Result 118 | 119 | 120 | 121 | 122 | 123 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/zcl_app_rule_finder.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_finder DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | INTERFACES zif_app_rule_finder. 8 | METHODS constructor 9 | RAISING zcx_app_exception. 10 | 11 | 12 | PROTECTED SECTION. 13 | PRIVATE SECTION. 14 | DATA mt_rule_data TYPE zapp_t_rule_sort. 15 | 16 | METHODS get_rule_data_by_full_spec 17 | IMPORTING is_rule_search TYPE zapp_s_rule_search 18 | RETURNING VALUE(rr_rule_data) TYPE REF TO zapp_s_rule. 19 | 20 | METHODS get_rule_data_w_context 21 | IMPORTING is_rule_search TYPE zapp_s_rule_search 22 | RETURNING VALUE(rr_rule_data) TYPE REF TO zapp_s_rule. 23 | 24 | 25 | METHODS get_rule_data_wo_token 26 | IMPORTING is_rule_search TYPE zapp_s_rule_search 27 | RETURNING VALUE(rr_rule_data) TYPE REF TO zapp_s_rule. 28 | 29 | METHODS get_rule_data_w_token 30 | IMPORTING is_rule_search TYPE zapp_s_rule_search 31 | RETURNING VALUE(rr_rule_data) TYPE REF TO zapp_s_rule. 32 | 33 | METHODS get_rule_data_default 34 | IMPORTING is_rule_search TYPE zapp_s_rule_search 35 | RETURNING VALUE(rr_rule_data) TYPE REF TO zapp_s_rule. 36 | 37 | ENDCLASS. 38 | 39 | 40 | 41 | CLASS ZCL_APP_RULE_FINDER IMPLEMENTATION. 42 | 43 | 44 | METHOD constructor. 45 | 46 | DATA lr_rule_prov TYPE REF TO zif_app_rule_provider. 47 | 48 | CREATE OBJECT lr_rule_prov TYPE zcl_app_rule_provider. 49 | mt_rule_data = lr_rule_prov->get_rules( ). 50 | 51 | ENDMETHOD. 52 | 53 | 54 | METHOD get_rule_data_by_full_spec. 55 | 56 | READ TABLE mt_rule_data REFERENCE INTO rr_rule_data 57 | WITH TABLE KEY token = is_rule_search-token 58 | context = is_rule_search-context 59 | hl_context = is_rule_search-hl_context 60 | sqlscript = is_rule_search-sqlscript. 61 | 62 | ENDMETHOD. 63 | 64 | 65 | METHOD get_rule_data_default. 66 | DATA lv_hl_context TYPE zapp_d_hl_context. 67 | DATA lv_context TYPE zapp_d_context. 68 | DATA lv_token TYPE zapp_d_token. 69 | 70 | READ TABLE mt_rule_data REFERENCE INTO rr_rule_data 71 | WITH TABLE KEY token = lv_token 72 | context = lv_context 73 | hl_context = lv_hl_context 74 | sqlscript = is_rule_search-sqlscript. 75 | ENDMETHOD. 76 | 77 | 78 | METHOD get_rule_data_wo_token. 79 | DATA lv_token TYPE zapp_d_token. 80 | 81 | READ TABLE mt_rule_data REFERENCE INTO rr_rule_data 82 | WITH TABLE KEY token = lv_token 83 | context = is_rule_search-context 84 | hl_context = is_rule_search-hl_context 85 | sqlscript = is_rule_search-sqlscript. 86 | ENDMETHOD. 87 | 88 | 89 | METHOD get_rule_data_w_context. 90 | DATA lv_hl_context TYPE zapp_d_hl_context. 91 | READ TABLE mt_rule_data REFERENCE INTO rr_rule_data 92 | WITH TABLE KEY token = is_rule_search-token 93 | context = is_rule_search-context 94 | hl_context = lv_hl_context 95 | sqlscript = is_rule_search-sqlscript. 96 | ENDMETHOD. 97 | 98 | 99 | METHOD get_rule_data_w_token. 100 | DATA lv_hl_context TYPE zapp_d_hl_context. 101 | DATA lv_context TYPE zapp_d_context. 102 | READ TABLE mt_rule_data REFERENCE INTO rr_rule_data 103 | WITH TABLE KEY token = is_rule_search-token 104 | context = lv_context 105 | hl_context = lv_hl_context 106 | sqlscript = is_rule_search-sqlscript. 107 | ENDMETHOD. 108 | 109 | 110 | METHOD zif_app_rule_finder~get_rule_data. 111 | rr_rule_data = get_rule_data_by_full_spec( is_rule_search = is_rule_search ). 112 | IF rr_rule_data IS NOT INITIAL. 113 | RETURN. 114 | ENDIF. 115 | 116 | rr_rule_data = get_rule_data_w_context( is_rule_search = is_rule_search ). 117 | IF rr_rule_data IS NOT INITIAL. 118 | RETURN. 119 | ENDIF. 120 | 121 | rr_rule_data = get_rule_data_wo_token( is_rule_search = is_rule_search ). 122 | IF rr_rule_data IS NOT INITIAL. 123 | RETURN. 124 | ENDIF. 125 | 126 | rr_rule_data = get_rule_data_w_token( is_rule_search = is_rule_search ). 127 | IF rr_rule_data IS NOT INITIAL. 128 | RETURN. 129 | ENDIF. 130 | 131 | rr_rule_data = get_rule_data_default( is_rule_search = is_rule_search ). 132 | IF rr_rule_data IS NOT INITIAL. 133 | RETURN. 134 | ENDIF. 135 | 136 | RAISE EXCEPTION TYPE zcx_app_exception 137 | MESSAGE ID 'ZAPP_MC_PRETTY_PRINT' 138 | TYPE 'E' 139 | NUMBER '005' 140 | WITH 141 | is_rule_search-token 142 | is_rule_search-context 143 | is_rule_search-hl_context 144 | is_rule_search-sqlscript. 145 | 146 | ENDMETHOD. 147 | ENDCLASS. 148 | -------------------------------------------------------------------------------- /abap/src/app_pretty_printer_rules/app_pretty_printer_rules_amdp/zcl_app_rule_amdp_union_all.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_rule_amdp_union_all DEFINITION 2 | PUBLIC 3 | FINAL 4 | INHERITING FROM zcl_app_rule_amdp_new_line_lft 5 | 6 | CREATE PUBLIC . 7 | 8 | PUBLIC SECTION. 9 | METHODS zif_app_rule~finalize_init REDEFINITION. 10 | METHODS zif_app_rule~is_new_line_req REDEFINITION. 11 | METHODS zif_app_rule~get_new_line_indent REDEFINITION. 12 | METHODS zif_app_rule~get_cur_offset_start REDEFINITION. 13 | METHODS zif_app_rule~get_cur_row REDEFINITION. 14 | PROTECTED SECTION. 15 | 16 | 17 | PRIVATE SECTION. 18 | METHODS is_union_or_all_of_union_all 19 | RETURNING VALUE(rv_result) TYPE abap_bool 20 | RAISING 21 | zcx_app_exception. 22 | ENDCLASS. 23 | 24 | 25 | 26 | CLASS zcl_app_rule_amdp_union_all IMPLEMENTATION. 27 | 28 | 29 | METHOD is_union_or_all_of_union_all. 30 | 31 | IF is_logic_active( ) = abap_false. 32 | RETURN. 33 | ENDIF. 34 | 35 | IF mr_token_ext->str_up = 'UNION' 36 | AND mr_next_rule IS NOT INITIAL 37 | AND mr_next_rule->get_token_up( ) = 'ALL'. 38 | RETURN. 39 | ENDIF. 40 | 41 | IF mr_token_ext->str_up = 'ALL'. 42 | IF mr_prev_rule IS INITIAL 43 | OR mr_prev_rule->get_token_up( ) <> 'UNION'. 44 | RETURN. 45 | ENDIF. 46 | ENDIF. 47 | 48 | rv_result = abap_true. 49 | ENDMETHOD. 50 | 51 | 52 | METHOD zif_app_rule~finalize_init. 53 | super->zif_app_rule~finalize_init( ). 54 | IF is_logic_active( ) = abap_false. 55 | RETURN. 56 | ENDIF. 57 | IF mr_token_ext->str_up = 'UNION'. 58 | IF mr_next_rule IS NOT INITIAL 59 | AND mr_next_rule->get_token_up( ) = 'ALL'. 60 | mr_rule_data->add_indent = -3. 61 | ELSE. 62 | mr_rule_data->add_indent = 1. 63 | ENDIF. 64 | mv_add_indent = mr_rule_data->add_indent. 65 | RETURN. 66 | ENDIF. 67 | 68 | IF mr_token_ext->str_up = 'ALL'. 69 | IF mr_prev_rule IS INITIAL 70 | OR mr_prev_rule->get_token_up( ) <> 'UNION'. 71 | mv_logic_active = abap_false. 72 | set_logic_active( ). 73 | RETURN. 74 | ENDIF. 75 | ENDIF. 76 | 77 | ENDMETHOD. 78 | 79 | 80 | METHOD zif_app_rule~get_cur_offset_start. 81 | DATA lv_token TYPE zapp_d_token. 82 | DATA lt_token TYPE zapp_t_token. 83 | DATA lt_stop_token TYPE zapp_t_token. 84 | DATA lr_select_rule TYPE REF TO zif_app_rule. 85 | 86 | lv_token = 'UNION'. 87 | INSERT lv_token INTO TABLE lt_stop_token. 88 | 89 | IF mr_token_ext->str_up = 'UNION' AND is_logic_active( ) = abap_true. 90 | 91 | lv_token = 'SELECT'. 92 | INSERT lv_token INTO TABLE lt_token. 93 | 94 | lr_select_rule = zcl_app_amdp_rule_utilities=>get_rule_in_stm_on_same_lvl_rw( 95 | EXPORTING 96 | ir_start_rule = me 97 | it_token = lt_token 98 | it_stop_token = lt_stop_token 99 | ). 100 | IF lr_select_rule IS INITIAL. 101 | rv_result = super->zif_app_rule~get_cur_offset_start( ). 102 | RETURN. 103 | ENDIF. 104 | 105 | rv_result = lr_select_rule->get_cur_offset_start( ) + mv_add_indent. 106 | 107 | ELSEIF mr_token_ext->str_up = 'ALL' AND is_logic_active( ) = abap_true. 108 | rv_result = mr_prev_rule->get_cur_offset_end( ). 109 | ELSE. 110 | rv_result = super->zif_app_rule~get_cur_offset_start( ). 111 | ENDIF. 112 | ENDMETHOD. 113 | 114 | 115 | METHOD zif_app_rule~get_cur_row. 116 | 117 | IF mr_token_ext->str_up = 'ALL' AND is_union_or_all_of_union_all( ). 118 | rv_result = mr_prev_rule->get_cur_row( ). 119 | 120 | ELSE. 121 | rv_result = super->zif_app_rule~get_cur_row( ). 122 | ENDIF. 123 | 124 | ENDMETHOD. 125 | 126 | 127 | METHOD zif_app_rule~get_new_line_indent. 128 | DATA lv_token TYPE zapp_d_token. 129 | DATA lt_token TYPE zapp_t_token. 130 | DATA lt_stop_token TYPE zapp_t_token. 131 | DATA lr_select_rule TYPE REF TO zif_app_rule. 132 | DATA lr_start_rule TYPE REF TO zif_app_rule. 133 | 134 | IF is_union_or_all_of_union_all( ). 135 | lv_token = 'SELECT'. 136 | INSERT lv_token INTO TABLE lt_token. 137 | 138 | lv_token = 'UNION'. 139 | INSERT lv_token INTO TABLE lt_stop_token. 140 | 141 | IF mr_token_ext->str_up = 'ALL'. 142 | lr_start_rule = mr_prev_rule. 143 | ELSE. 144 | lr_start_rule = me. 145 | ENDIF. 146 | 147 | lr_select_rule = zcl_app_amdp_rule_utilities=>get_rule_in_stm_on_same_lvl_rw( 148 | EXPORTING 149 | ir_start_rule = lr_start_rule 150 | it_token = lt_token 151 | it_stop_token = lt_stop_token 152 | ). 153 | IF lr_select_rule IS INITIAL. 154 | rv_result = super->zif_app_rule~get_new_line_indent( ). 155 | RETURN. 156 | ENDIF. 157 | 158 | rv_result = lr_select_rule->get_cur_offset_start( ) - lr_select_rule->get_additional_indent( ). 159 | 160 | ELSE. 161 | rv_result = super->zif_app_rule~get_new_line_indent( ). 162 | ENDIF. 163 | ENDMETHOD. 164 | 165 | 166 | METHOD zif_app_rule~is_new_line_req. 167 | 168 | IF is_union_or_all_of_union_all( ). 169 | rv_result = abap_true. 170 | ELSE. 171 | rv_result = super->zif_app_rule~is_new_line_req( ). 172 | ENDIF. 173 | 174 | ENDMETHOD. 175 | ENDCLASS. 176 | -------------------------------------------------------------------------------- /abap/src/zcl_app_scanner_delimiter.clas.abap: -------------------------------------------------------------------------------- 1 | CLASS zcl_app_scanner_delimiter DEFINITION 2 | PUBLIC 3 | FINAL 4 | CREATE PUBLIC . 5 | 6 | PUBLIC SECTION. 7 | 8 | METHODS set_prev_delimiter 9 | IMPORTING 10 | it_source TYPE sourcetable 11 | ir_prev_token_ext TYPE REF TO zapp_s_stokesx_ext 12 | ir_token_ext TYPE REF TO zapp_s_stokesx_ext 13 | RAISING 14 | zcx_app_exception. 15 | 16 | PROTECTED SECTION. 17 | PRIVATE SECTION. 18 | 19 | METHODS set_delimiter_from_source 20 | IMPORTING 21 | it_source TYPE sourcetable 22 | ir_prev_token_ext TYPE REF TO zapp_s_stokesx_ext 23 | ir_token_ext TYPE REF TO zapp_s_stokesx_ext 24 | RAISING 25 | zcx_app_exception. 26 | 27 | METHODS get_delimiter_from_source 28 | IMPORTING 29 | it_source TYPE sourcetable 30 | ir_prev_token_ext TYPE REF TO zapp_s_stokesx_ext 31 | ir_token_ext TYPE REF TO zapp_s_stokesx_ext 32 | RETURNING 33 | VALUE(rt_delimiter) TYPE zapp_t_delimiter 34 | RAISING 35 | zcx_app_exception. 36 | METHODS get_multi_line_delimiter 37 | IMPORTING 38 | ir_source TYPE REF TO string 39 | iv_offset TYPE i 40 | ir_token_ext TYPE REF TO zapp_s_stokesx_ext 41 | ir_prev_token_ext TYPE REF TO zapp_s_stokesx_ext 42 | it_source TYPE sourcetable 43 | RETURNING 44 | VALUE(rt_delimiter) TYPE zapp_t_delimiter. 45 | METHODS get_single_line_delimiter 46 | IMPORTING 47 | ir_source TYPE REF TO string 48 | ir_token_ext TYPE REF TO zapp_s_stokesx_ext 49 | iv_offset TYPE i 50 | RETURNING 51 | VALUE(rv_delimiter) TYPE string. 52 | METHODS get_delimiter_until_end_of_src 53 | IMPORTING 54 | ir_source TYPE REF TO string 55 | iv_offset TYPE i 56 | RETURNING 57 | VALUE(rv_delimiter) TYPE zapp_d_delimiter. 58 | 59 | ENDCLASS. 60 | 61 | 62 | 63 | CLASS zcl_app_scanner_delimiter IMPLEMENTATION. 64 | 65 | 66 | METHOD get_delimiter_from_source. 67 | DATA lr_source TYPE REF TO string. 68 | DATA lv_offset TYPE i. 69 | DATA lv_delimiter TYPE string. 70 | READ TABLE it_source REFERENCE INTO lr_source 71 | INDEX ir_prev_token_ext->row. 72 | IF sy-subrc <> 0. 73 | RAISE EXCEPTION TYPE zcx_app_exception 74 | MESSAGE ID 'ZAPP_MC_PRETTY_PRINT' 75 | TYPE 'E' 76 | NUMBER '004' 77 | WITH 78 | ir_prev_token_ext->str 79 | ir_prev_token_ext->row. 80 | ENDIF. 81 | 82 | lv_offset = ir_prev_token_ext->col + ir_prev_token_ext->len. 83 | IF ir_token_ext IS INITIAL. 84 | 85 | lv_delimiter = get_delimiter_until_end_of_src( 86 | ir_source = lr_source 87 | iv_offset = lv_offset ). 88 | INSERT lv_delimiter INTO TABLE rt_delimiter. 89 | RETURN. 90 | ENDIF. 91 | 92 | IF ir_token_ext->row = ir_prev_token_ext->row. 93 | lv_delimiter = get_single_line_delimiter( 94 | ir_source = lr_source 95 | ir_token_ext = ir_token_ext 96 | iv_offset = lv_offset ). 97 | INSERT lv_delimiter INTO TABLE rt_delimiter. 98 | RETURN. 99 | ENDIF. 100 | 101 | rt_delimiter = get_multi_line_delimiter( 102 | ir_source = lr_source 103 | iv_offset = lv_offset 104 | ir_token_ext = ir_token_ext 105 | ir_prev_token_ext = ir_prev_token_ext 106 | it_source = it_source ). 107 | 108 | ENDMETHOD. 109 | 110 | 111 | METHOD get_delimiter_until_end_of_src. 112 | 113 | rv_delimiter = ir_source->*+iv_offset. 114 | ENDMETHOD. 115 | 116 | 117 | METHOD get_multi_line_delimiter. 118 | 119 | DATA lr_source_to TYPE REF TO string. 120 | DATA lv_length TYPE i. 121 | DATA lv_delimiter TYPE string. 122 | DATA lr_delimiter TYPE REF TO string. 123 | 124 | lv_delimiter = get_delimiter_until_end_of_src( 125 | EXPORTING 126 | ir_source = ir_source 127 | iv_offset = iv_offset ). 128 | INSERT lv_delimiter INTO TABLE rt_delimiter. 129 | LOOP AT it_source REFERENCE INTO lr_source_to 130 | FROM ir_prev_token_ext->row + 1. 131 | IF sy-tabix > ir_token_ext->row. 132 | EXIT. 133 | ENDIF. 134 | INSERT INITIAL LINE INTO TABLE rt_delimiter REFERENCE INTO lr_delimiter. 135 | IF sy-tabix <> ir_token_ext->row. 136 | lr_delimiter->* = lr_source_to->*. 137 | ELSE. 138 | lv_length = ir_token_ext->col. 139 | IF lv_length >= 1. 140 | lr_delimiter->* = lr_source_to->*(lv_length). 141 | ENDIF. 142 | ENDIF. 143 | ENDLOOP. 144 | 145 | ENDMETHOD. 146 | 147 | 148 | METHOD get_single_line_delimiter. 149 | 150 | DATA lv_length TYPE i. 151 | 152 | lv_length = ir_token_ext->col - iv_offset. 153 | 154 | rv_delimiter = ir_source->*+iv_offset(lv_length). 155 | ENDMETHOD. 156 | 157 | 158 | METHOD set_delimiter_from_source. 159 | DATA lt_delimiter TYPE zapp_t_delimiter. 160 | 161 | lt_delimiter = get_delimiter_from_source( 162 | it_source = it_source 163 | ir_prev_token_ext = ir_prev_token_ext 164 | ir_token_ext = ir_token_ext ). 165 | 166 | ir_prev_token_ext->delimiter_org = lt_delimiter. 167 | 168 | ir_prev_token_ext->delimiter = lt_delimiter. 169 | 170 | ENDMETHOD. 171 | 172 | 173 | METHOD set_prev_delimiter. 174 | 175 | IF ir_prev_token_ext IS INITIAL. 176 | RETURN. 177 | ENDIF. 178 | 179 | set_delimiter_from_source( 180 | EXPORTING 181 | it_source = it_source 182 | ir_prev_token_ext = ir_prev_token_ext 183 | ir_token_ext = ir_token_ext 184 | ). 185 | 186 | ENDMETHOD. 187 | ENDCLASS. 188 | -------------------------------------------------------------------------------- /doc/Installation/README.md: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | The AMDP Pretty Printer consists like the SAP ABAP Development Tools of 4 | a Rest Service in the SAP Development System that contains the Pretty 5 | Printer logic and an Eclipse Plugin that calls the Rest Service and 6 | adjust the coding. 7 | 8 | It works with SAP Business Suite on HANA and S/4 HANA (both on premise). 9 | I didn’t check the ABAP Cloud. I assume that it does not work in the 10 | cloud because it uses the command SCAN ABAP SOURCE to get the tokens of 11 | the source code (like the SAP Standard Pretty Printer). This command is 12 | marked in the SAP documenation for internal use. 13 | 14 | ## Installation of the Eclipse Plugin 15 | 16 | The plugin is developed and tested with the Eclipse Version 2021-12. 17 | 18 | It requires the following Software: 19 | 20 | - ABAP Development Tools for SAP HANA (Developer Edition) 3.22.1 or 21 | higher. 22 | 23 | - JRE version 16 or higher (SAP ADT requires only JRE version 11) 24 | 25 | See also here 26 | 27 | 28 | 29 | You have to copy the current zapp.pretty.printer\_\*.jar file from the 30 | github folder [Eclipse Dropin\\plugins](../../Eclipse%20Dropin/plugins) to your local Eclipse\\dropins folder. 31 | 32 | Then you have to restart your Eclipse. 33 | 34 | You should see the AMDP Pretty Printer Icon 35 | in your Toolbar in the ABAP 37 | Perspective. 38 | 39 | 41 | 42 | And also, in the Menu when you open an ABAP Class 43 | 44 | 46 | 47 | If you don’t see it, then please check the Error Log after the start of 48 | Eclipse for the errors (Window =\> Show View =\> Error Log). 49 | 50 | Some people reported that they see no error in the log, but the plugin 51 | is still not loaded. In this case it helped them to install a fresh 52 | eclipse with the SAP ADT. 53 | 54 | ## Installation of the AMDP Pretty Printer Logic in the backend 55 | 56 | The formatting logic of the AMDP Pretty Printer is written in ABAP. So 57 | it is required to install it in your SAP Development System. It is no 58 | transport and no additional SICF configuration required. It will be 59 | installed to the temporary package $APP_PRETTY_PRINTER with some sub 60 | packages. The Eclipse Plugin uses the existing SAP ADT ICF Service for 61 | the communication with the backend. The Eclipse Plugin sends a post 62 | request to the URL /sap/bc/adt/zapp/zapp_pretty_printer of your SAP 63 | Development System. See also BADI_ADT_REST_RFC_APPLICATION for more 64 | information. 65 | 66 | The tool abapGit is required for the installation. You can find it with 67 | a good documentation at . 68 | 69 | You should install the AMDP Pretty Printer to the package 70 | $APP_PRETTY_PRINTER. 71 | 72 | Here is a short manual how to install the Standalone version of abapGit 73 | from scratch and how to upload the AMDP Pretty Printer from an offline 74 | repository (ZIP-File). If you have already experience with abapGit then 75 | the online repository is recommended to easily pull the latest updates. 76 | 77 | ### Installation of abapGit (Standalone) 78 | 79 | Start transaction SE38 in your SAP Development System and create the 80 | program ZABAPGIT_STANDALONE (abapGit Standalone) 81 | 82 | 84 | 85 | Save it as Local Object. 86 | 87 | Ein Bild, das Text enthält. Automatisch generierte Beschreibung 90 | 91 | Copy the latest source code from 92 | 93 | 94 | and paste it into the program (replace the generated source code). It 95 | takes a while because the program has more than 100.000 lines of code. 96 | 97 | Activate the program (CTRL+F3) and start it with F8. 98 | 99 | It should look like this: 100 | 101 | Ein Bild, das Text enthält. Automatisch generierte Beschreibung 103 | 104 | ### Installation of AMDP Pretty Printer with abapGit (offline) 105 | 106 | Add first you must download this git repository as ZIP-File from github. 107 | 108 | Then start abapGit and click on New Offline. 109 | 110 | 112 | 113 | Enter the following values: 114 | 115 | - Repository Name =\> AMDP Pretty Printer 116 | 117 | - Package =\> $APP_PRETTY_PRINTER 118 | 119 | - Folder Logic =\> Full 120 | 121 | Ein Bild, das Text enthält. Automatisch generierte Beschreibung 123 | 124 | Click on Create Offline Repo. 125 | 126 | The following screen will appear: 127 | 128 | 130 | 131 | Click on Import zip to upload the ZIP-File. 132 | 133 | The following screen will appear when the upload is done: 134 | 135 | 137 | 138 | Click now on Pull zip and the installation will start. 139 | 140 | You must activate all shown objects at the end and then the installation 141 | is done. 142 | 143 | 145 | 146 | Hint: The report ZAPP_PRETTY_PRINTER_TEST can be used to test the AMDP 147 | Pretty Printer without the rest service and without the Eclipse Plugin. 148 | Just copy your AMDP Method / Class source code into the first long text 149 | field and press the Pretty Print button. 150 | 151 | The right long text field shows the formatted source code. The lower 152 | long text fields can be used to generate Unit Tests. Please be aware 153 | that the long text fields do not show the text in a script where each 154 | character has the same width. So, it could look a little bit ugly, but 155 | it is well formatted. You can copy the result for example to Notepad++ 156 | to see the difference. 157 | 158 | 160 | -------------------------------------------------------------------------------- /abap/src/zapp_settings.prog.abap: -------------------------------------------------------------------------------- 1 | *&---------------------------------------------------------------------* 2 | *& Report ZAPP_SETTINGS 3 | *&---------------------------------------------------------------------* 4 | *& 5 | *&---------------------------------------------------------------------* 6 | REPORT zapp_settings. 7 | 8 | *&---------------------------------------------------------------------* 9 | *& Class lcl_settings 10 | *&---------------------------------------------------------------------* 11 | *& 12 | *&---------------------------------------------------------------------* 13 | CLASS lcl_settings DEFINITION FINAL. 14 | 15 | 16 | PUBLIC SECTION. 17 | METHODS constructor 18 | IMPORTING iv_uname TYPE sy-uname. 19 | 20 | METHODS lock 21 | RAISING zcx_app_exception. 22 | 23 | METHODS unlock. 24 | 25 | METHODS get_settings 26 | RETURNING VALUE(rs_settings) TYPE zapp_settings. 27 | 28 | METHODS handle_exit 29 | IMPORTING is_settings TYPE zapp_settings. 30 | 31 | METHODS save 32 | IMPORTING is_settings TYPE zapp_settings. 33 | 34 | METHODS delete. 35 | 36 | METHODS exists_settings 37 | RETURNING VALUE(rv_result) TYPE abap_bool. 38 | 39 | PRIVATE SECTION. 40 | DATA mv_uname TYPE sy-uname. 41 | 42 | ENDCLASS. 43 | 44 | CLASS lcl_settings IMPLEMENTATION. 45 | METHOD constructor. 46 | mv_uname = iv_uname. 47 | ENDMETHOD. 48 | METHOD lock. 49 | 50 | CALL FUNCTION 'ENQUEUE_EZAPP_SETTINGS' 51 | EXPORTING 52 | * MODE_ZAPP_SETTINGS = 'E' 53 | uname = mv_uname 54 | * X_UNAME = ' ' 55 | _scope = '1' 56 | * _WAIT = ' ' 57 | * _COLLECT = ' ' 58 | EXCEPTIONS 59 | foreign_lock = 1 60 | system_failure = 2 61 | OTHERS = 3. 62 | IF sy-subrc <> 0. 63 | RAISE EXCEPTION TYPE zcx_app_exception 64 | MESSAGE ID sy-msgid 65 | TYPE sy-msgty 66 | NUMBER sy-msgno 67 | WITH 68 | sy-msgv1 69 | sy-msgv2 70 | sy-msgv3 71 | sy-msgv4. 72 | ENDIF. 73 | 74 | ENDMETHOD. 75 | 76 | METHOD unlock. 77 | CALL FUNCTION 'DEQUEUE_EZAPP_SETTINGS' 78 | EXPORTING 79 | * MODE_ZAPP_SETTINGS = 'E' 80 | uname = mv_uname 81 | * X_UNAME = ' ' 82 | * _SCOPE = '3' 83 | * _SYNCHRON = ' ' 84 | * _COLLECT = ' ' 85 | . 86 | 87 | 88 | ENDMETHOD. 89 | 90 | METHOD get_settings. 91 | SELECT SINGLE * FROM zapp_settings INTO rs_settings 92 | WHERE uname = mv_uname. 93 | IF sy-subrc <> 0. 94 | CLEAR rs_settings. 95 | rs_settings-uname = mv_uname. 96 | ENDIF. 97 | ENDMETHOD. 98 | 99 | METHOD handle_exit. 100 | DATA ls_settings_old TYPE zapp_settings. 101 | DATA lv_answer TYPE c. 102 | ls_settings_old = get_settings( ). 103 | IF ls_settings_old <> is_settings. 104 | CALL FUNCTION 'POPUP_TO_CONFIRM' 105 | EXPORTING 106 | titlebar = TEXT-110 107 | * DIAGNOSE_OBJECT = ' ' 108 | text_question = TEXT-100 109 | * TEXT_BUTTON_1 = 'Ja'(001) 110 | * ICON_BUTTON_1 = ' ' 111 | * TEXT_BUTTON_2 = 'Nein'(002) 112 | * ICON_BUTTON_2 = ' ' 113 | * DEFAULT_BUTTON = '1' 114 | * DISPLAY_CANCEL_BUTTON = 'X' 115 | * USERDEFINED_F1_HELP = ' ' 116 | * START_COLUMN = 25 117 | * START_ROW = 6 118 | * POPUP_TYPE = 119 | * IV_QUICKINFO_BUTTON_1 = ' ' 120 | * IV_QUICKINFO_BUTTON_2 = ' ' 121 | IMPORTING 122 | answer = lv_answer 123 | * TABLES 124 | * PARAMETER = 125 | EXCEPTIONS 126 | text_not_found = 1 127 | OTHERS = 2. 128 | IF sy-subrc <> 0. 129 | MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno 130 | WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. 131 | ENDIF. 132 | 133 | CASE lv_answer. 134 | WHEN '1'. 135 | save( is_settings ). 136 | LEAVE TO SCREEN 0. 137 | WHEN '2'. 138 | LEAVE TO SCREEN 0. 139 | WHEN OTHERS. 140 | RETURN. 141 | ENDCASE. 142 | ELSE. 143 | LEAVE TO SCREEN 0. 144 | ENDIF. 145 | ENDMETHOD. 146 | 147 | METHOD save. 148 | DATA lv_subrc TYPE sy-subrc. 149 | IF exists_settings( ). 150 | UPDATE zapp_settings FROM is_settings. 151 | ELSE. 152 | INSERT zapp_settings FROM is_settings. 153 | ENDIF. 154 | lv_subrc = sy-subrc. 155 | COMMIT WORK AND WAIT. 156 | IF lv_subrc = 0. 157 | MESSAGE s016(zapp_mc_pretty_print). 158 | ELSE. 159 | MESSAGE e017(zapp_mc_pretty_print). 160 | ENDIF. 161 | 162 | LEAVE TO SCREEN 0. 163 | ENDMETHOD. 164 | 165 | METHOD delete. 166 | DELETE FROM zapp_settings WHERE uname = mv_uname. 167 | COMMIT WORK AND WAIT. 168 | MESSAGE s018(zapp_mc_pretty_print). 169 | LEAVE TO SCREEN 0. 170 | ENDMETHOD. 171 | 172 | METHOD exists_settings. 173 | ##NEEDED DATA lv_uname TYPE sy-uname. 174 | SELECT SINGLE uname INTO lv_uname 175 | FROM zapp_settings 176 | WHERE uname = mv_uname. 177 | IF sy-subrc = 0. 178 | rv_result = abap_true. 179 | ENDIF. 180 | ENDMETHOD. 181 | 182 | ENDCLASS. 183 | 184 | TABLES zapp_settings. 185 | 186 | PARAMETERS p_set_g RADIOBUTTON GROUP g1 DEFAULT 'X'. 187 | PARAMETERS p_set_u RADIOBUTTON GROUP g1. "#EC NEEDED 188 | DATA gr_settings TYPE REF TO lcl_settings. "#EC NEEDED 189 | DATA gr_ex TYPE REF TO zcx_app_exception. "#EC NEEDED 190 | DATA gv_okcode TYPE sy-ucomm. "#EC NEEDED 191 | 192 | AT SELECTION-SCREEN. 193 | 194 | IF sy-ucomm = 'ONLI'. 195 | IF p_set_g = abap_true. 196 | CREATE OBJECT gr_settings 197 | EXPORTING 198 | iv_uname = '*'. 199 | ELSE. 200 | CREATE OBJECT gr_settings 201 | EXPORTING 202 | iv_uname = sy-uname. 203 | ENDIF. 204 | TRY. 205 | gr_settings->lock( ). 206 | CATCH zcx_app_exception INTO gr_ex. " Pretty Printer Exception 207 | MESSAGE gr_ex->get_text( ) TYPE 'E'. 208 | ENDTRY. 209 | ENDIF. 210 | 211 | 212 | START-OF-SELECTION. 213 | 214 | zapp_settings = gr_settings->get_settings( ). 215 | 216 | CALL SCREEN 0100. 217 | gr_settings->unlock( ). 218 | 219 | INCLUDE zapp_settings_canceli01. 220 | 221 | INCLUDE zapp_settings_status_0100o01. 222 | 223 | INCLUDE zapp_settings_user_command_i01. 224 | --------------------------------------------------------------------------------