From 8c75009b2f100776cc98cd1c96d18d11795326ba Mon Sep 17 00:00:00 2001 From: oblomov-dev <102328295+oblomov-dev@users.noreply.github.com> Date: Wed, 29 Jan 2025 14:57:47 +0100 Subject: [PATCH] added srtti renamed to abap2ui5 (#1717) * srtti * fixes * update * update * update * update * update --------- Co-authored-by: oblomov-dev@outlook.com <> --- ci/abaplint/abap_cloud_check.jsonc | 2 +- ci/abaplint/abaplint.jsonc | 2 +- src/{01 => }/00/01/package.devc.xml | 0 src/{01 => }/00/01/z2ui5_cl_ajson.clas.abap | 0 .../00/01/z2ui5_cl_ajson.clas.locals_imp.abap | 0 .../01/z2ui5_cl_ajson.clas.testclasses.abap | 0 src/{01 => }/00/01/z2ui5_cl_ajson.clas.xml | 0 .../00/01/z2ui5_cl_ajson_filter_lib.clas.abap | 0 ...5_cl_ajson_filter_lib.clas.locals_imp.abap | 0 ..._cl_ajson_filter_lib.clas.testclasses.abap | 0 .../00/01/z2ui5_cl_ajson_filter_lib.clas.xml | 0 .../00/01/z2ui5_cl_ajson_mapping.clas.abap | 0 ...2ui5_cl_ajson_mapping.clas.locals_def.abap | 0 ...2ui5_cl_ajson_mapping.clas.locals_imp.abap | 0 ...ui5_cl_ajson_mapping.clas.testclasses.abap | 0 .../00/01/z2ui5_cl_ajson_mapping.clas.xml | 0 .../00/01/z2ui5_cl_ajson_utilities.clas.abap | 0 ...5_cl_ajson_utilities.clas.testclasses.abap | 0 .../00/01/z2ui5_cl_ajson_utilities.clas.xml | 0 .../00/01/z2ui5_cx_ajson_error.clas.abap | 0 ...z2ui5_cx_ajson_error.clas.testclasses.abap | 0 .../00/01/z2ui5_cx_ajson_error.clas.xml | 0 src/{01 => }/00/01/z2ui5_if_ajson.intf.abap | 0 src/{01 => }/00/01/z2ui5_if_ajson.intf.xml | 0 .../00/01/z2ui5_if_ajson_filter.intf.abap | 0 .../00/01/z2ui5_if_ajson_filter.intf.xml | 0 .../00/01/z2ui5_if_ajson_mapping.intf.abap | 0 .../00/01/z2ui5_if_ajson_mapping.intf.xml | 0 .../00/01/z2ui5_if_ajson_types.intf.abap | 0 .../00/01/z2ui5_if_ajson_types.intf.xml | 0 src/00/02/package.devc.xml | 10 + src/00/02/z2ui5_cl_srtti_aunit.clas.abap | 61 +++++ src/00/02/z2ui5_cl_srtti_aunit.clas.xml | 17 ++ src/00/02/z2ui5_cl_srtti_classdescr.clas.abap | 26 ++ src/00/02/z2ui5_cl_srtti_classdescr.clas.xml | 16 ++ .../02/z2ui5_cl_srtti_complexdescr.clas.abap | 15 ++ .../02/z2ui5_cl_srtti_complexdescr.clas.xml | 16 ++ src/00/02/z2ui5_cl_srtti_datadescr.clas.abap | 15 ++ src/00/02/z2ui5_cl_srtti_datadescr.clas.xml | 16 ++ src/00/02/z2ui5_cl_srtti_elemdescr.clas.abap | 95 ++++++++ ...5_cl_srtti_elemdescr.clas.testclasses.abap | 98 ++++++++ src/00/02/z2ui5_cl_srtti_elemdescr.clas.xml | 17 ++ src/00/02/z2ui5_cl_srtti_intfdescr.clas.abap | 24 ++ src/00/02/z2ui5_cl_srtti_intfdescr.clas.xml | 16 ++ .../02/z2ui5_cl_srtti_objectdescr.clas.abap | 41 ++++ src/00/02/z2ui5_cl_srtti_objectdescr.clas.xml | 16 ++ src/00/02/z2ui5_cl_srtti_refdescr.clas.abap | 42 ++++ src/00/02/z2ui5_cl_srtti_refdescr.clas.xml | 16 ++ .../02/z2ui5_cl_srtti_structdescr.clas.abap | 84 +++++++ src/00/02/z2ui5_cl_srtti_structdescr.clas.xml | 16 ++ src/00/02/z2ui5_cl_srtti_tabledescr.clas.abap | 70 ++++++ ..._cl_srtti_tabledescr.clas.testclasses.abap | 117 +++++++++ src/00/02/z2ui5_cl_srtti_tabledescr.clas.xml | 17 ++ src/00/02/z2ui5_cl_srtti_typedescr.clas.abap | 117 +++++++++ ...5_cl_srtti_typedescr.clas.testclasses.abap | 229 ++++++++++++++++++ src/00/02/z2ui5_cl_srtti_typedescr.clas.xml | 17 ++ src/00/02/z2ui5_cx_srtti.clas.abap | 35 +++ src/00/02/z2ui5_cx_srtti.clas.xml | 17 ++ src/{01 => }/00/03/package.devc.xml | 0 src/{01 => }/00/03/z2ui5_cl_util.clas.abap | 42 +++- .../00/03/z2ui5_cl_util.clas.locals_imp.abap | 0 .../00/03/z2ui5_cl_util.clas.testclasses.abap | 0 src/{01 => }/00/03/z2ui5_cl_util.clas.xml | 0 .../00/03/z2ui5_cx_util_error.clas.abap | 0 .../z2ui5_cx_util_error.clas.testclasses.abap | 0 .../00/03/z2ui5_cx_util_error.clas.xml | 0 src/{01/00/02 => 00/04}/package.devc.xml | 0 .../02 => 00/04}/z2ui5_cl_abap_api.clas.abap | 0 .../z2ui5_cl_abap_api.clas.testclasses.abap | 0 .../02 => 00/04}/z2ui5_cl_abap_api.clas.xml | 0 .../04}/z2ui5_cl_abap_api_http.clas.abap | 0 .../04}/z2ui5_cl_abap_api_http.clas.xml | 0 .../02 => 00/04}/z2ui5_cx_abap_api.clas.abap | 0 .../z2ui5_cx_abap_api.clas.testclasses.abap | 0 .../02 => 00/04}/z2ui5_cx_abap_api.clas.xml | 0 src/{01 => }/00/package.devc.xml | 0 src/01/02/z2ui5_cl_core_srv_attri.clas.abap | 9 - src/01/02/z2ui5_cl_core_srv_json.clas.abap | 2 +- 78 files changed, 1311 insertions(+), 22 deletions(-) rename src/{01 => }/00/01/package.devc.xml (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson.clas.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson.clas.locals_imp.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson.clas.testclasses.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson.clas.xml (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_filter_lib.clas.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_filter_lib.clas.xml (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_mapping.clas.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_mapping.clas.xml (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_utilities.clas.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap (100%) rename src/{01 => }/00/01/z2ui5_cl_ajson_utilities.clas.xml (100%) rename src/{01 => }/00/01/z2ui5_cx_ajson_error.clas.abap (100%) rename src/{01 => }/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap (100%) rename src/{01 => }/00/01/z2ui5_cx_ajson_error.clas.xml (100%) rename src/{01 => }/00/01/z2ui5_if_ajson.intf.abap (100%) rename src/{01 => }/00/01/z2ui5_if_ajson.intf.xml (100%) rename src/{01 => }/00/01/z2ui5_if_ajson_filter.intf.abap (100%) rename src/{01 => }/00/01/z2ui5_if_ajson_filter.intf.xml (100%) rename src/{01 => }/00/01/z2ui5_if_ajson_mapping.intf.abap (100%) rename src/{01 => }/00/01/z2ui5_if_ajson_mapping.intf.xml (100%) rename src/{01 => }/00/01/z2ui5_if_ajson_types.intf.abap (100%) rename src/{01 => }/00/01/z2ui5_if_ajson_types.intf.xml (100%) create mode 100644 src/00/02/package.devc.xml create mode 100644 src/00/02/z2ui5_cl_srtti_aunit.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_aunit.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_classdescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_classdescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_complexdescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_complexdescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_datadescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_datadescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_elemdescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_elemdescr.clas.testclasses.abap create mode 100644 src/00/02/z2ui5_cl_srtti_elemdescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_intfdescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_intfdescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_objectdescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_objectdescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_refdescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_refdescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_structdescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_structdescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_tabledescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_tabledescr.clas.testclasses.abap create mode 100644 src/00/02/z2ui5_cl_srtti_tabledescr.clas.xml create mode 100644 src/00/02/z2ui5_cl_srtti_typedescr.clas.abap create mode 100644 src/00/02/z2ui5_cl_srtti_typedescr.clas.testclasses.abap create mode 100644 src/00/02/z2ui5_cl_srtti_typedescr.clas.xml create mode 100644 src/00/02/z2ui5_cx_srtti.clas.abap create mode 100644 src/00/02/z2ui5_cx_srtti.clas.xml rename src/{01 => }/00/03/package.devc.xml (100%) rename src/{01 => }/00/03/z2ui5_cl_util.clas.abap (97%) rename src/{01 => }/00/03/z2ui5_cl_util.clas.locals_imp.abap (100%) rename src/{01 => }/00/03/z2ui5_cl_util.clas.testclasses.abap (100%) rename src/{01 => }/00/03/z2ui5_cl_util.clas.xml (100%) rename src/{01 => }/00/03/z2ui5_cx_util_error.clas.abap (100%) rename src/{01 => }/00/03/z2ui5_cx_util_error.clas.testclasses.abap (100%) rename src/{01 => }/00/03/z2ui5_cx_util_error.clas.xml (100%) rename src/{01/00/02 => 00/04}/package.devc.xml (100%) rename src/{01/00/02 => 00/04}/z2ui5_cl_abap_api.clas.abap (100%) rename src/{01/00/02 => 00/04}/z2ui5_cl_abap_api.clas.testclasses.abap (100%) rename src/{01/00/02 => 00/04}/z2ui5_cl_abap_api.clas.xml (100%) rename src/{01/00/02 => 00/04}/z2ui5_cl_abap_api_http.clas.abap (100%) rename src/{01/00/02 => 00/04}/z2ui5_cl_abap_api_http.clas.xml (100%) rename src/{01/00/02 => 00/04}/z2ui5_cx_abap_api.clas.abap (100%) rename src/{01/00/02 => 00/04}/z2ui5_cx_abap_api.clas.testclasses.abap (100%) rename src/{01/00/02 => 00/04}/z2ui5_cx_abap_api.clas.xml (100%) rename src/{01 => }/00/package.devc.xml (100%) diff --git a/ci/abaplint/abap_cloud_check.jsonc b/ci/abaplint/abap_cloud_check.jsonc index 7a56ccaa..1f753cd4 100644 --- a/ci/abaplint/abap_cloud_check.jsonc +++ b/ci/abaplint/abap_cloud_check.jsonc @@ -1,7 +1,7 @@ { "global": { "files": "/src/**/*.*", - "noIssues": [ "/src/01/00/01" ] + "noIssues": [ "/src/00" ] }, "dependencies": [ { diff --git a/ci/abaplint/abaplint.jsonc b/ci/abaplint/abaplint.jsonc index e9cf55a0..f0e142b3 100644 --- a/ci/abaplint/abaplint.jsonc +++ b/ci/abaplint/abaplint.jsonc @@ -1,7 +1,7 @@ { "global": { "files": "/src/**/*.*", - "noIssues": [ "/src/01/00" ] + "noIssues": [ "/src/00" ] }, "dependencies": [ { diff --git a/src/01/00/01/package.devc.xml b/src/00/01/package.devc.xml similarity index 100% rename from src/01/00/01/package.devc.xml rename to src/00/01/package.devc.xml diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.abap b/src/00/01/z2ui5_cl_ajson.clas.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson.clas.abap rename to src/00/01/z2ui5_cl_ajson.clas.abap diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.locals_imp.abap b/src/00/01/z2ui5_cl_ajson.clas.locals_imp.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson.clas.locals_imp.abap rename to src/00/01/z2ui5_cl_ajson.clas.locals_imp.abap diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.testclasses.abap b/src/00/01/z2ui5_cl_ajson.clas.testclasses.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson.clas.testclasses.abap rename to src/00/01/z2ui5_cl_ajson.clas.testclasses.abap diff --git a/src/01/00/01/z2ui5_cl_ajson.clas.xml b/src/00/01/z2ui5_cl_ajson.clas.xml similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson.clas.xml rename to src/00/01/z2ui5_cl_ajson.clas.xml diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.abap b/src/00/01/z2ui5_cl_ajson_filter_lib.clas.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.abap rename to src/00/01/z2ui5_cl_ajson_filter_lib.clas.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap b/src/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap rename to src/00/01/z2ui5_cl_ajson_filter_lib.clas.locals_imp.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap b/src/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap rename to src/00/01/z2ui5_cl_ajson_filter_lib.clas.testclasses.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.xml b/src/00/01/z2ui5_cl_ajson_filter_lib.clas.xml similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_filter_lib.clas.xml rename to src/00/01/z2ui5_cl_ajson_filter_lib.clas.xml diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.abap b/src/00/01/z2ui5_cl_ajson_mapping.clas.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_mapping.clas.abap rename to src/00/01/z2ui5_cl_ajson_mapping.clas.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap b/src/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap rename to src/00/01/z2ui5_cl_ajson_mapping.clas.locals_def.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap b/src/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap rename to src/00/01/z2ui5_cl_ajson_mapping.clas.locals_imp.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap b/src/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap rename to src/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_mapping.clas.xml b/src/00/01/z2ui5_cl_ajson_mapping.clas.xml similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_mapping.clas.xml rename to src/00/01/z2ui5_cl_ajson_mapping.clas.xml diff --git a/src/01/00/01/z2ui5_cl_ajson_utilities.clas.abap b/src/00/01/z2ui5_cl_ajson_utilities.clas.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_utilities.clas.abap rename to src/00/01/z2ui5_cl_ajson_utilities.clas.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap b/src/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap rename to src/00/01/z2ui5_cl_ajson_utilities.clas.testclasses.abap diff --git a/src/01/00/01/z2ui5_cl_ajson_utilities.clas.xml b/src/00/01/z2ui5_cl_ajson_utilities.clas.xml similarity index 100% rename from src/01/00/01/z2ui5_cl_ajson_utilities.clas.xml rename to src/00/01/z2ui5_cl_ajson_utilities.clas.xml diff --git a/src/01/00/01/z2ui5_cx_ajson_error.clas.abap b/src/00/01/z2ui5_cx_ajson_error.clas.abap similarity index 100% rename from src/01/00/01/z2ui5_cx_ajson_error.clas.abap rename to src/00/01/z2ui5_cx_ajson_error.clas.abap diff --git a/src/01/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap b/src/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap similarity index 100% rename from src/01/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap rename to src/00/01/z2ui5_cx_ajson_error.clas.testclasses.abap diff --git a/src/01/00/01/z2ui5_cx_ajson_error.clas.xml b/src/00/01/z2ui5_cx_ajson_error.clas.xml similarity index 100% rename from src/01/00/01/z2ui5_cx_ajson_error.clas.xml rename to src/00/01/z2ui5_cx_ajson_error.clas.xml diff --git a/src/01/00/01/z2ui5_if_ajson.intf.abap b/src/00/01/z2ui5_if_ajson.intf.abap similarity index 100% rename from src/01/00/01/z2ui5_if_ajson.intf.abap rename to src/00/01/z2ui5_if_ajson.intf.abap diff --git a/src/01/00/01/z2ui5_if_ajson.intf.xml b/src/00/01/z2ui5_if_ajson.intf.xml similarity index 100% rename from src/01/00/01/z2ui5_if_ajson.intf.xml rename to src/00/01/z2ui5_if_ajson.intf.xml diff --git a/src/01/00/01/z2ui5_if_ajson_filter.intf.abap b/src/00/01/z2ui5_if_ajson_filter.intf.abap similarity index 100% rename from src/01/00/01/z2ui5_if_ajson_filter.intf.abap rename to src/00/01/z2ui5_if_ajson_filter.intf.abap diff --git a/src/01/00/01/z2ui5_if_ajson_filter.intf.xml b/src/00/01/z2ui5_if_ajson_filter.intf.xml similarity index 100% rename from src/01/00/01/z2ui5_if_ajson_filter.intf.xml rename to src/00/01/z2ui5_if_ajson_filter.intf.xml diff --git a/src/01/00/01/z2ui5_if_ajson_mapping.intf.abap b/src/00/01/z2ui5_if_ajson_mapping.intf.abap similarity index 100% rename from src/01/00/01/z2ui5_if_ajson_mapping.intf.abap rename to src/00/01/z2ui5_if_ajson_mapping.intf.abap diff --git a/src/01/00/01/z2ui5_if_ajson_mapping.intf.xml b/src/00/01/z2ui5_if_ajson_mapping.intf.xml similarity index 100% rename from src/01/00/01/z2ui5_if_ajson_mapping.intf.xml rename to src/00/01/z2ui5_if_ajson_mapping.intf.xml diff --git a/src/01/00/01/z2ui5_if_ajson_types.intf.abap b/src/00/01/z2ui5_if_ajson_types.intf.abap similarity index 100% rename from src/01/00/01/z2ui5_if_ajson_types.intf.abap rename to src/00/01/z2ui5_if_ajson_types.intf.abap diff --git a/src/01/00/01/z2ui5_if_ajson_types.intf.xml b/src/00/01/z2ui5_if_ajson_types.intf.xml similarity index 100% rename from src/01/00/01/z2ui5_if_ajson_types.intf.xml rename to src/00/01/z2ui5_if_ajson_types.intf.xml diff --git a/src/00/02/package.devc.xml b/src/00/02/package.devc.xml new file mode 100644 index 00000000..287828cb --- /dev/null +++ b/src/00/02/package.devc.xml @@ -0,0 +1,10 @@ + + + + + + srtti - https://github.com/sandraros/S-RTTI + + + + diff --git a/src/00/02/z2ui5_cl_srtti_aunit.clas.abap b/src/00/02/z2ui5_cl_srtti_aunit.clas.abap new file mode 100644 index 00000000..137cf38a --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_aunit.clas.abap @@ -0,0 +1,61 @@ +CLASS z2ui5_cl_srtti_aunit DEFINITION + PUBLIC + FOR TESTING + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + CLASS-METHODS serialize_deserialize IMPORTING variable TYPE any. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_srtti_aunit IMPLEMENTATION. + + METHOD serialize_deserialize. + " Serialize: both type and value at the same time. + FIELD-SYMBOLS TYPE any. + DATA rtti1 TYPE REF TO cl_abap_typedescr. + DATA srtti1 TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA xstring TYPE xstring. + DATA srtti2 TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA temp1 TYPE REF TO cl_abap_datadescr. + DATA rtti2 LIKE temp1. + DATA ref_variable2 TYPE REF TO data. + FIELD-SYMBOLS TYPE any. + ASSIGN variable TO . + + rtti1 = cl_abap_typedescr=>describe_by_data( ). + + srtti1 = z2ui5_cl_srtti_typedescr=>create_by_data_object( ). + + CALL TRANSFORMATION id + SOURCE srtti = srtti1 + dobj = + RESULT XML xstring + OPTIONS data_refs = 'heap-or-create'. + + " Deserialize: (1) the type, to create the variable (2) then the value. + + CALL TRANSFORMATION id + SOURCE XML xstring + RESULT srtti = srtti2. + + temp1 ?= srtti2->get_rtti( ). + + rtti2 = temp1. + + CREATE DATA ref_variable2 TYPE HANDLE rtti2. + + ASSIGN ref_variable2->* TO . + CALL TRANSFORMATION id + SOURCE XML xstring + RESULT dobj = . + + cl_abap_unit_assert=>assert_equals( exp = rtti1 act = rtti2 ). + cl_abap_unit_assert=>assert_equals( exp = act = ). + ENDMETHOD. + +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_aunit.clas.xml b/src/00/02/z2ui5_cl_srtti_aunit.clas.xml new file mode 100644 index 00000000..5043d6bf --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_aunit.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_SRTTI_AUNIT + E + Test class + 05 + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_classdescr.clas.abap b/src/00/02/z2ui5_cl_srtti_classdescr.clas.abap new file mode 100644 index 00000000..3ea99d1c --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_classdescr.clas.abap @@ -0,0 +1,26 @@ +"!

Serializable RTTI class

+CLASS z2ui5_cl_srtti_classdescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_objectdescr + CREATE PUBLIC. + + PUBLIC SECTION. + + DATA class_kind LIKE cl_abap_classdescr=>class_kind. + DATA create_visibility LIKE cl_abap_classdescr=>create_visibility. + + METHODS constructor + IMPORTING + !rtti TYPE REF TO cl_abap_classdescr. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_srtti_classdescr IMPLEMENTATION. + METHOD constructor. + super->constructor( rtti ). + class_kind = rtti->class_kind. + create_visibility = rtti->create_visibility. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_classdescr.clas.xml b/src/00/02/z2ui5_cl_srtti_classdescr.clas.xml new file mode 100644 index 00000000..a2c7b2da --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_classdescr.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SRTTI_CLASSDESCR + E + Serializable RTTI class + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_complexdescr.clas.abap b/src/00/02/z2ui5_cl_srtti_complexdescr.clas.abap new file mode 100644 index 00000000..303479c8 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_complexdescr.clas.abap @@ -0,0 +1,15 @@ +"!

Serializable RTTI complex type

+CLASS z2ui5_cl_srtti_complexdescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_datadescr + CREATE PUBLIC . + + PUBLIC SECTION. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_srtti_complexdescr IMPLEMENTATION. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_complexdescr.clas.xml b/src/00/02/z2ui5_cl_srtti_complexdescr.clas.xml new file mode 100644 index 00000000..ccde27c8 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_complexdescr.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SRTTI_COMPLEXDESCR + E + Serializable RTTI complex type + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_datadescr.clas.abap b/src/00/02/z2ui5_cl_srtti_datadescr.clas.abap new file mode 100644 index 00000000..7ad29a31 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_datadescr.clas.abap @@ -0,0 +1,15 @@ +"!

Serializable RTTI data object

+CLASS z2ui5_cl_srtti_datadescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_typedescr + CREATE PUBLIC . + + PUBLIC SECTION. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_srtti_datadescr IMPLEMENTATION. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_datadescr.clas.xml b/src/00/02/z2ui5_cl_srtti_datadescr.clas.xml new file mode 100644 index 00000000..f7c55390 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_datadescr.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SRTTI_DATADESCR + E + Serializable RTTI data object + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_elemdescr.clas.abap b/src/00/02/z2ui5_cl_srtti_elemdescr.clas.abap new file mode 100644 index 00000000..05f3ea45 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_elemdescr.clas.abap @@ -0,0 +1,95 @@ +"!

Serializable RTTI elementary type

+CLASS z2ui5_cl_srtti_elemdescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_datadescr + CREATE PUBLIC. + + PUBLIC SECTION. + + DATA edit_mask LIKE cl_abap_elemdescr=>edit_mask. + DATA help_id LIKE cl_abap_elemdescr=>help_id. + DATA output_length LIKE cl_abap_elemdescr=>output_length. + + METHODS constructor + IMPORTING + !rtti TYPE REF TO cl_abap_elemdescr. + + METHODS get_rtti + REDEFINITION. + PROTECTED SECTION. + METHODS get_rtti_by_type_kind + IMPORTING + i_type_kind LIKE cl_abap_typedescr=>type_kind + RETURNING + VALUE(rtti) TYPE REF TO cl_abap_typedescr. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_srtti_elemdescr IMPLEMENTATION. + + + METHOD constructor. + super->constructor( rtti ). + + edit_mask = rtti->edit_mask. + help_id = rtti->help_id. + output_length = rtti->output_length. + ENDMETHOD. + + + METHOD get_rtti. + rtti = super->get_rtti( ). + IF rtti IS BOUND. + RETURN. + ENDIF. + + IF is_ddic_type = abap_true + AND technical_type = abap_false. + " If XML transformations are used, they may be based on + " the data element, for instance XSDBOOLEAN will convert "true" + " into "X" during deserialization. + rtti = cl_abap_typedescr=>describe_by_name( absolute_name ). + ELSE. + rtti = get_rtti_by_type_kind( type_kind ). + ENDIF. + ENDMETHOD. + + + METHOD get_rtti_by_type_kind. + DATA l_length TYPE i. + + CASE i_type_kind. + WHEN cl_abap_typedescr=>typekind_num. + l_length = length / cl_abap_char_utilities=>charsize. + rtti = cl_abap_elemdescr=>get_n( l_length ). + WHEN cl_abap_typedescr=>typekind_char. + l_length = length / cl_abap_char_utilities=>charsize. + rtti = cl_abap_elemdescr=>get_c( l_length ). + WHEN cl_abap_typedescr=>typekind_string. + rtti = cl_abap_elemdescr=>get_string( ). + WHEN cl_abap_typedescr=>typekind_xstring. + rtti = cl_abap_elemdescr=>get_xstring( ). + WHEN cl_abap_typedescr=>typekind_int. + rtti = cl_abap_elemdescr=>get_i( ). + WHEN cl_abap_typedescr=>typekind_float. + rtti = cl_abap_elemdescr=>get_f( ). + WHEN cl_abap_typedescr=>typekind_date. + rtti = cl_abap_elemdescr=>get_d( ). + WHEN cl_abap_typedescr=>typekind_time. + rtti = cl_abap_elemdescr=>get_t( ). + WHEN cl_abap_typedescr=>typekind_hex. + rtti = cl_abap_elemdescr=>get_x( length ). + WHEN cl_abap_typedescr=>typekind_packed. + rtti = cl_abap_elemdescr=>get_p( p_length = length + p_decimals = decimals ). + WHEN cl_abap_typedescr=>typekind_decfloat16. + rtti = cl_abap_elemdescr=>get_decfloat16( ). + WHEN cl_abap_typedescr=>typekind_decfloat34. + rtti = cl_abap_elemdescr=>get_decfloat34( ). + WHEN OTHERS. + RAISE EXCEPTION TYPE z2ui5_cx_srtti. + ENDCASE. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_elemdescr.clas.testclasses.abap b/src/00/02/z2ui5_cl_srtti_elemdescr.clas.testclasses.abap new file mode 100644 index 00000000..7b241323 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_elemdescr.clas.testclasses.abap @@ -0,0 +1,98 @@ +*"* use this source file for your ABAP unit test classes + +CLASS ltc_subclass DEFINITION INHERITING FROM z2ui5_cl_srtti_elemdescr. + PUBLIC SECTION. + METHODS get_rtti_by_type_kind_2 + IMPORTING + i_type_kind LIKE cl_abap_typedescr=>type_kind + RETURNING + VALUE(rtti) TYPE REF TO cl_abap_typedescr. +ENDCLASS. + + +CLASS ltc_subclass IMPLEMENTATION. + METHOD get_rtti_by_type_kind_2. + rtti = get_rtti_by_type_kind( i_type_kind ). + ENDMETHOD. +ENDCLASS. + + +CLASS ltc_main DEFINITION + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + + METHODS serialize_deserialize FOR TESTING. + METHODS get_rtti_by_type_kind FOR TESTING. + + METHODS get_rtti_by_type_kind_assert + IMPORTING + variable TYPE simple. +ENDCLASS. + + +CLASS ltc_main IMPLEMENTATION. + METHOD serialize_deserialize. + DATA variable TYPE c LENGTH 20. + + variable = 'Hello World'. + z2ui5_cl_srtti_aunit=>serialize_deserialize( variable ). + ENDMETHOD. + + METHOD get_rtti_by_type_kind_assert. + DATA rtti TYPE REF TO cl_abap_elemdescr. + DATA lo_subclass TYPE REF TO ltc_subclass. + DATA rtti2 TYPE REF TO cl_abap_typedescr. + + rtti ?= cl_abap_typedescr=>describe_by_data( variable ). + + CREATE OBJECT lo_subclass + EXPORTING rtti = rtti. + + rtti2 = lo_subclass->get_rtti_by_type_kind_2( i_type_kind = rtti->type_kind ). + + cl_abap_unit_assert=>assert_equals( msg = 'decimals' + exp = rtti->decimals + act = rtti2->decimals ). + cl_abap_unit_assert=>assert_equals( msg = 'type_kind' + exp = rtti->type_kind + act = rtti2->type_kind ). + cl_abap_unit_assert=>assert_equals( msg = 'length' + exp = rtti->length + act = rtti2->length ). + ENDMETHOD. + + METHOD get_rtti_by_type_kind. + DATA n TYPE n LENGTH 20. + DATA c TYPE c LENGTH 20. + DATA string TYPE string. + DATA xstring TYPE xstring. + DATA i TYPE i. + DATA f TYPE f. + DATA d TYPE d. + DATA t TYPE t. + DATA x TYPE x LENGTH 20. + DATA p TYPE p LENGTH 10 DECIMALS 3. + DATA int1 TYPE int1. + DATA int2 TYPE int2. + DATA decfloat16 TYPE decfloat16. + DATA decfloat34 TYPE decfloat34. + + get_rtti_by_type_kind_assert( n ). + get_rtti_by_type_kind_assert( c ). + get_rtti_by_type_kind_assert( string ). + get_rtti_by_type_kind_assert( xstring ). + get_rtti_by_type_kind_assert( i ). + get_rtti_by_type_kind_assert( f ). + get_rtti_by_type_kind_assert( d ). + get_rtti_by_type_kind_assert( t ). + get_rtti_by_type_kind_assert( x ). + get_rtti_by_type_kind_assert( p ). + get_rtti_by_type_kind_assert( int1 ). + get_rtti_by_type_kind_assert( int2 ). + get_rtti_by_type_kind_assert( decfloat16 ). + get_rtti_by_type_kind_assert( decfloat34 ). + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_elemdescr.clas.xml b/src/00/02/z2ui5_cl_srtti_elemdescr.clas.xml new file mode 100644 index 00000000..49ec15be --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_elemdescr.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_SRTTI_ELEMDESCR + E + Serializable RTTI elementary type + 1 + X + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_intfdescr.clas.abap b/src/00/02/z2ui5_cl_srtti_intfdescr.clas.abap new file mode 100644 index 00000000..9c4cfab8 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_intfdescr.clas.abap @@ -0,0 +1,24 @@ +"!

Serializable RTTI interface

+CLASS z2ui5_cl_srtti_intfdescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_objectdescr + CREATE PUBLIC. + + PUBLIC SECTION. + + DATA intf_kind LIKE cl_abap_intfdescr=>intf_kind. + + METHODS constructor + IMPORTING + !rtti TYPE REF TO cl_abap_intfdescr. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_srtti_intfdescr IMPLEMENTATION. + METHOD constructor. + super->constructor( rtti ). + intf_kind = rtti->intf_kind. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_intfdescr.clas.xml b/src/00/02/z2ui5_cl_srtti_intfdescr.clas.xml new file mode 100644 index 00000000..8f34a72b --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_intfdescr.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SRTTI_INTFDESCR + E + Serializable RTTI interface + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_objectdescr.clas.abap b/src/00/02/z2ui5_cl_srtti_objectdescr.clas.abap new file mode 100644 index 00000000..1d3ee3e7 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_objectdescr.clas.abap @@ -0,0 +1,41 @@ +"!

Serializable RTTI object type

+class z2ui5_cl_srtti_objectdescr definition + public + inheriting from z2ui5_cl_srtti_typedescr + create public . + +public section. + + data INTERFACES like CL_ABAP_OBJECTDESCR=>INTERFACES . + data TYPES like CL_ABAP_OBJECTDESCR=>TYPES . + data ATTRIBUTES like CL_ABAP_OBJECTDESCR=>ATTRIBUTES . + data METHODS like CL_ABAP_OBJECTDESCR=>METHODS . + data EVENTS like CL_ABAP_OBJECTDESCR=>EVENTS . + + methods CONSTRUCTOR + importing + !RTTI type ref to CL_ABAP_OBJECTDESCR . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cl_srtti_objectdescr IMPLEMENTATION. + + + METHOD constructor. + super->constructor( rtti ). + + interfaces = rtti->interfaces. + types = rtti->types. + attributes = rtti->attributes. + methods = rtti->methods. + events = rtti->events. + + READ TABLE interfaces WITH KEY name = 'IF_SERIALIZABLE_OBJECT' TRANSPORTING NO FIELDS. + IF sy-subrc <> 0. + not_serializable = abap_true. + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_objectdescr.clas.xml b/src/00/02/z2ui5_cl_srtti_objectdescr.clas.xml new file mode 100644 index 00000000..e8740851 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_objectdescr.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SRTTI_OBJECTDESCR + E + Serializable RTTI object type + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_refdescr.clas.abap b/src/00/02/z2ui5_cl_srtti_refdescr.clas.abap new file mode 100644 index 00000000..e3004e4b --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_refdescr.clas.abap @@ -0,0 +1,42 @@ +"!

Serializable RTTI reference

+CLASS z2ui5_cl_srtti_refdescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_datadescr + CREATE PUBLIC. + + PUBLIC SECTION. + + DATA referenced_type TYPE REF TO z2ui5_cl_srtti_typedescr. + + METHODS constructor + IMPORTING + !rtti TYPE REF TO cl_abap_refdescr. + + METHODS get_rtti + REDEFINITION. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_srtti_refdescr IMPLEMENTATION. + METHOD constructor. + super->constructor( rtti ). + CREATE OBJECT referenced_type TYPE z2ui5_cl_srtti_typedescr + EXPORTING rtti = rtti->get_referenced_type( ). + IF referenced_type->not_serializable = abap_true. + not_serializable = abap_true. + ENDIF. + ENDMETHOD. + + METHOD get_rtti. + IF referenced_type->type_kind = cl_abap_typedescr=>typekind_data. + rtti = cl_abap_refdescr=>get_ref_to_data( ). + ELSEIF referenced_type->absolute_name = '\CLASS=OBJECT'. + rtti = cl_abap_refdescr=>get_ref_to_object( ). + ELSE. + rtti = referenced_type->get_rtti( ). + ENDIF. + rtti = cl_abap_refdescr=>create( rtti ). + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_refdescr.clas.xml b/src/00/02/z2ui5_cl_srtti_refdescr.clas.xml new file mode 100644 index 00000000..857409c0 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_refdescr.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SRTTI_REFDESCR + E + Serializable RTTI reference + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_structdescr.clas.abap b/src/00/02/z2ui5_cl_srtti_structdescr.clas.abap new file mode 100644 index 00000000..186ce172 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_structdescr.clas.abap @@ -0,0 +1,84 @@ +"!

Serializable RTTI structure

+CLASS z2ui5_cl_srtti_structdescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_complexdescr + CREATE PUBLIC. + + PUBLIC SECTION. + + TYPES: + BEGIN OF sabap_componentdescr, + name TYPE string, + type TYPE REF TO z2ui5_cl_srtti_datadescr, + as_include TYPE abap_bool, + suffix TYPE string, + END OF sabap_componentdescr. + TYPES sabap_component_tab TYPE STANDARD TABLE OF sabap_componentdescr WITH DEFAULT KEY. + + DATA struct_kind LIKE cl_abap_structdescr=>struct_kind READ-ONLY. + DATA components TYPE sabap_component_tab READ-ONLY. + DATA has_include LIKE cl_abap_structdescr=>has_include READ-ONLY. + + METHODS constructor + IMPORTING + !rtti TYPE REF TO cl_abap_structdescr. + + METHODS get_rtti + REDEFINITION. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_srtti_structdescr IMPLEMENTATION. + METHOD constructor. + DATA components_rtti TYPE abap_component_tab. + DATA scomponent TYPE sabap_componentdescr. + DATA scomponent_rtti TYPE REF TO z2ui5_cl_srtti_datadescr. + + FIELD-SYMBOLS TYPE abap_componentdescr. + + super->constructor( rtti ). + + struct_kind = rtti->struct_kind. + has_include = rtti->has_include. + + components_rtti = rtti->get_components( ). + + LOOP AT components_rtti ASSIGNING . + + CLEAR scomponent. + scomponent-name = -name. + + scomponent_rtti ?= z2ui5_cl_srtti_datadescr=>create_by_rtti( -type ). + scomponent-type = scomponent_rtti. + scomponent-as_include = -as_include. + scomponent-suffix = -suffix. + + APPEND scomponent TO components. + IF scomponent-type->not_serializable = abap_true. + not_serializable = abap_true. + ENDIF. + ENDLOOP. + ENDMETHOD. + + METHOD get_rtti. + DATA components_rtti TYPE cl_abap_structdescr=>component_table. + DATA component_rtti TYPE abap_componentdescr. + + FIELD-SYMBOLS TYPE sabap_componentdescr. + + CLEAR components_rtti. + LOOP AT components ASSIGNING . + + CLEAR component_rtti. + component_rtti-name = -name. + component_rtti-type ?= -type->get_rtti( ). + component_rtti-as_include = -as_include. + component_rtti-suffix = -suffix. + + APPEND component_rtti TO components_rtti. + ENDLOOP. + rtti = cl_abap_structdescr=>create( components_rtti ). + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_structdescr.clas.xml b/src/00/02/z2ui5_cl_srtti_structdescr.clas.xml new file mode 100644 index 00000000..51a745a3 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_structdescr.clas.xml @@ -0,0 +1,16 @@ + + + + + + Z2UI5_CL_SRTTI_STRUCTDESCR + E + Serializable RTTI structure + 1 + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_tabledescr.clas.abap b/src/00/02/z2ui5_cl_srtti_tabledescr.clas.abap new file mode 100644 index 00000000..d74c5517 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_tabledescr.clas.abap @@ -0,0 +1,70 @@ +"!

Serializable RTTI table

+CLASS z2ui5_cl_srtti_tabledescr DEFINITION + PUBLIC + INHERITING FROM z2ui5_cl_srtti_complexdescr + CREATE PUBLIC. + + PUBLIC SECTION. + + DATA key LIKE cl_abap_tabledescr=>key. + DATA initial_size LIKE cl_abap_tabledescr=>initial_size. + DATA key_defkind LIKE cl_abap_tabledescr=>key_defkind. + DATA has_unique_key LIKE cl_abap_tabledescr=>has_unique_key. + DATA table_kind LIKE cl_abap_tabledescr=>table_kind. + DATA line_type TYPE REF TO z2ui5_cl_srtti_datadescr. + + METHODS constructor + IMPORTING + !rtti TYPE REF TO cl_abap_tabledescr. + + METHODS get_rtti + REDEFINITION. + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + +CLASS z2ui5_cl_srtti_tabledescr IMPLEMENTATION. + METHOD constructor. + super->constructor( rtti ). + key = rtti->key. + initial_size = rtti->initial_size. + key_defkind = rtti->key_defkind. + has_unique_key = rtti->has_unique_key. + table_kind = rtti->table_kind. + + line_type ?= z2ui5_cl_srtti_typedescr=>create_by_rtti( rtti->get_table_line_type( ) ). + IF line_type->not_serializable = abap_true. + not_serializable = abap_true. + ENDIF. + ENDMETHOD. + + METHOD get_rtti. + DATA lt_empty_key TYPE abap_keydescr_tab. + DATA lo_data_rtti TYPE REF TO cl_abap_datadescr. + DATA lo_error TYPE REF TO cx_sy_table_creation. + + FIELD-SYMBOLS TYPE abap_keydescr_tab. + + CLEAR lt_empty_key. + CASE key_defkind. + WHEN cl_abap_tabledescr=>keydefkind_user. + ASSIGN key TO . + WHEN OTHERS. + ASSIGN lt_empty_key TO . + ENDCASE. + TRY. + + lo_data_rtti ?= line_type->get_rtti( ). + rtti = cl_abap_tabledescr=>create( p_line_type = lo_data_rtti + p_table_kind = table_kind + p_unique = has_unique_key + p_key = + p_key_kind = key_defkind ). + + CATCH cx_sy_table_creation INTO lo_error. + RAISE EXCEPTION TYPE z2ui5_cx_srtti + EXPORTING previous = lo_error. + ENDTRY. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_tabledescr.clas.testclasses.abap b/src/00/02/z2ui5_cl_srtti_tabledescr.clas.testclasses.abap new file mode 100644 index 00000000..9f69918f --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_tabledescr.clas.testclasses.abap @@ -0,0 +1,117 @@ +*"* use this source file for your ABAP unit test classes +CLASS ltc_main DEFINITION + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + PRIVATE SECTION. + TYPES: BEGIN OF ty_line_with_components, + very__very_long_component_name TYPE i, + END OF ty_line_with_components. + TYPES ty_std_table_comps_default_key TYPE STANDARD TABLE OF ty_line_with_components WITH DEFAULT KEY. + + METHODS check_instantiated_classes FOR TESTING. + METHODS bound_line_type FOR TESTING. + + METHODS assert_copy_equals_original + IMPORTING + srtti TYPE REF TO z2ui5_cl_srtti_typedescr + original TYPE ty_std_table_comps_default_key. +ENDCLASS. + + +CLASS ltc_main IMPLEMENTATION. + METHOD assert_copy_equals_original. + DATA rtti TYPE REF TO cl_abap_tabledescr. + DATA dref TYPE REF TO data. + + FIELD-SYMBOLS TYPE any. + + rtti ?= srtti->get_rtti( ). + CREATE DATA dref TYPE HANDLE rtti. + ASSIGN dref->* TO . + = original. + cl_abap_unit_assert=>assert_equals( act = + exp = original ). + ENDMETHOD. + + METHOD bound_line_type. + DATA line_with_components TYPE ty_line_with_components. + DATA std_table_comps_default_key TYPE ty_std_table_comps_default_key. + DATA component TYPE abap_componentdescr. + DATA components TYPE abap_component_tab. + DATA rtti TYPE REF TO cl_abap_tabledescr. + DATA dref TYPE REF TO data. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE ty_line_with_components. + + line_with_components-very__very_long_component_name = 25. + INSERT line_with_components INTO TABLE std_table_comps_default_key. + line_with_components-very__very_long_component_name = 37. + INSERT line_with_components INTO TABLE std_table_comps_default_key. + + component-name = 'VERY__VERY_LONG_COMPONENT_NAME'. + component-type = cl_abap_elemdescr=>get_i( ). + INSERT component INTO TABLE components. + + rtti = cl_abap_tabledescr=>create( p_line_type = cl_abap_structdescr=>create( p_components = components ) ). + + CREATE DATA dref TYPE HANDLE rtti. + ASSIGN dref->* TO . + CREATE DATA dref LIKE LINE OF . + ASSIGN dref->* TO . + + LOOP AT std_table_comps_default_key ASSIGNING . + MOVE-CORRESPONDING TO . + INSERT INTO TABLE . + ENDLOOP. + + srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( ). + + assert_copy_equals_original( srtti = srtti + original = ). + ENDMETHOD. + + METHOD check_instantiated_classes. + DATA comp_row TYPE LINE OF abap_component_tab. + DATA comp_tab TYPE abap_component_tab. + DATA struct_rtti TYPE REF TO cl_abap_structdescr. + DATA table_rtti TYPE REF TO cl_abap_tabledescr. + DATA dref TYPE REF TO data. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA test TYPE REF TO z2ui5_cl_srtti_tabledescr. + DATA srtti_tab TYPE REF TO z2ui5_cl_srtti_tabledescr. + DATA srtti2 TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA test2 TYPE REF TO z2ui5_cl_srtti_structdescr. + + FIELD-SYMBOLS TYPE any. + + comp_row-name = 'VERY__VERY_LONG_COMPONENT_NAME'. + comp_row-type = cl_abap_elemdescr=>get_i( ). + INSERT comp_row INTO TABLE comp_tab. + + struct_rtti = cl_abap_structdescr=>create( p_components = comp_tab ). + table_rtti = cl_abap_tabledescr=>create( p_line_type = struct_rtti ). + CREATE DATA dref TYPE HANDLE table_rtti. + ASSIGN dref->* TO . + + srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( ). + + TRY. + test ?= srtti. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( ). + ENDTRY. + + srtti_tab ?= srtti. + srtti2 = srtti_tab->line_type. + + TRY. + test2 ?= srtti2. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( ). + ENDTRY. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_tabledescr.clas.xml b/src/00/02/z2ui5_cl_srtti_tabledescr.clas.xml new file mode 100644 index 00000000..2a852da7 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_tabledescr.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_SRTTI_TABLEDESCR + E + Serializable RTTI table + 1 + X + X + X + X + + + + diff --git a/src/00/02/z2ui5_cl_srtti_typedescr.clas.abap b/src/00/02/z2ui5_cl_srtti_typedescr.clas.abap new file mode 100644 index 00000000..5740a20b --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_typedescr.clas.abap @@ -0,0 +1,117 @@ +"!

Serializable RTTI any type

+CLASS z2ui5_cl_srtti_typedescr DEFINITION + PUBLIC + CREATE PUBLIC. + + PUBLIC SECTION. + + INTERFACES if_serializable_object. + + DATA absolute_name LIKE cl_abap_typedescr=>absolute_name READ-ONLY. + DATA type_kind LIKE cl_abap_typedescr=>type_kind READ-ONLY. + DATA length LIKE cl_abap_typedescr=>length READ-ONLY. + DATA decimals LIKE cl_abap_typedescr=>decimals READ-ONLY. + DATA kind LIKE cl_abap_typedescr=>kind READ-ONLY. + "! True if it's an object type which doesn't implement the interface IF_SERIALIZABLE_OBJECT + DATA not_serializable TYPE abap_bool READ-ONLY. + DATA is_ddic_type TYPE abap_bool READ-ONLY. + "! True if the absolute name is %_T... + DATA technical_type TYPE abap_bool READ-ONLY. + + METHODS constructor + IMPORTING + !rtti TYPE REF TO cl_abap_typedescr. + METHODS get_rtti + RETURNING + VALUE(rtti) TYPE REF TO cl_abap_typedescr. + CLASS-METHODS create_by_rtti + IMPORTING + !rtti TYPE REF TO cl_abap_typedescr + RETURNING + VALUE(srtti) TYPE REF TO z2ui5_cl_srtti_typedescr. + CLASS-METHODS create_by_data_object + IMPORTING + !data_object TYPE any + RETURNING + VALUE(srtti) TYPE REF TO z2ui5_cl_srtti_typedescr. + PROTECTED SECTION. + PRIVATE SECTION. + +ENDCLASS. + + +CLASS z2ui5_cl_srtti_typedescr IMPLEMENTATION. + METHOD constructor. + absolute_name = rtti->absolute_name. + type_kind = rtti->type_kind. + length = rtti->length. + decimals = rtti->decimals. + kind = rtti->kind. + is_ddic_type = rtti->is_ddic_type( ). + IF rtti->absolute_name CP '\TYPE=%_T*'. + technical_type = abap_true. + ENDIF. + ENDMETHOD. + + METHOD create_by_data_object. + srtti = create_by_rtti( cl_abap_typedescr=>describe_by_data( data_object ) ). + ENDMETHOD. + + METHOD create_by_rtti. + DATA elem_rtti TYPE REF TO cl_abap_elemdescr. + DATA struct_rtti TYPE REF TO cl_abap_structdescr. + DATA table_rtti TYPE REF TO cl_abap_tabledescr. + DATA ref_rtti TYPE REF TO cl_abap_refdescr. + DATA class_rtti TYPE REF TO cl_abap_classdescr. + DATA intf_rtti TYPE REF TO cl_abap_intfdescr. + + CASE rtti->kind. + WHEN cl_abap_typedescr=>kind_elem. + + elem_rtti ?= rtti. + CREATE OBJECT srtti TYPE z2ui5_cl_srtti_elemdescr + EXPORTING rtti = elem_rtti. + + WHEN cl_abap_typedescr=>kind_struct. + + struct_rtti ?= rtti. + CREATE OBJECT srtti TYPE z2ui5_cl_srtti_structdescr + EXPORTING rtti = struct_rtti. + + WHEN cl_abap_typedescr=>kind_table. + + table_rtti ?= rtti. + CREATE OBJECT srtti TYPE z2ui5_cl_srtti_tabledescr + EXPORTING rtti = table_rtti. + + WHEN cl_abap_typedescr=>kind_ref. + + ref_rtti ?= rtti. + CREATE OBJECT srtti TYPE z2ui5_cl_srtti_refdescr + EXPORTING rtti = ref_rtti. + + WHEN cl_abap_typedescr=>kind_class. + + class_rtti ?= rtti. + CREATE OBJECT srtti TYPE z2ui5_cl_srtti_classdescr + EXPORTING rtti = class_rtti. + + WHEN cl_abap_typedescr=>kind_intf. + + intf_rtti ?= rtti. + CREATE OBJECT srtti TYPE z2ui5_cl_srtti_intfdescr + EXPORTING rtti = intf_rtti. + + WHEN OTHERS. + " Unsupported (new ABAP features in the future) + RAISE EXCEPTION TYPE z2ui5_cx_srtti. + ENDCASE. + ENDMETHOD. + + METHOD get_rtti. + " default behavior + IF technical_type = abap_false. + rtti = cl_abap_typedescr=>describe_by_name( absolute_name ). + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_typedescr.clas.testclasses.abap b/src/00/02/z2ui5_cl_srtti_typedescr.clas.testclasses.abap new file mode 100644 index 00000000..f635e17c --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_typedescr.clas.testclasses.abap @@ -0,0 +1,229 @@ +*"* use this source file for your ABAP unit test classes + +INTERFACE lif_any. +ENDINTERFACE. + + +CLASS lcl_any DEFINITION. + PUBLIC SECTION. + INTERFACES lif_any. +ENDCLASS. + + +CLASS ltc_main DEFINITION + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + + METHODS technical_type FOR TESTING. + METHODS create_by_rtti_elem FOR TESTING RAISING cx_static_check. + METHODS create_by_rtti_struct FOR TESTING RAISING cx_static_check. + METHODS create_by_rtti_table FOR TESTING RAISING cx_static_check. + METHODS create_by_rtti_ref FOR TESTING RAISING cx_static_check. + METHODS create_by_rtti_class FOR TESTING RAISING cx_static_check. + METHODS create_by_rtti_intf FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS ltc_serialize_deserialize DEFINITION + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + + METHODS class FOR TESTING. + METHODS elem FOR TESTING. + METHODS intf FOR TESTING. + METHODS ref FOR TESTING. + METHODS structure FOR TESTING. + METHODS table FOR TESTING. + + TYPES ty_char_10 TYPE c LENGTH 10. + DATA: BEGIN OF variables, + char_10 TYPE ty_char_10, + ref_to_class TYPE REF TO lcl_any, + ref_to_intf TYPE REF TO lif_any, + BEGIN OF structure, + comp1 TYPE i, + END OF structure, + table TYPE STANDARD TABLE OF i WITH DEFAULT KEY, + dref TYPE REF TO ty_char_10, + END OF variables. + DATA rtti_before TYPE REF TO cl_abap_typedescr. + + METHODS assert_equal_serializ_deserial. +ENDCLASS. + + +CLASS ltc_main IMPLEMENTATION. + METHOD create_by_rtti_class. + DATA variable TYPE REF TO lcl_any. + DATA typedescr TYPE REF TO cl_abap_typedescr. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA test TYPE REF TO z2ui5_cl_srtti_classdescr. + + CREATE OBJECT variable TYPE lcl_any. + typedescr ?= cl_abap_typedescr=>describe_by_object_ref( variable ). + srtti = z2ui5_cl_srtti_typedescr=>create_by_rtti( typedescr ). + + TRY. + test ?= srtti. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_classdescr' ). + ENDTRY. + ENDMETHOD. + + METHOD create_by_rtti_elem. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA variable TYPE c LENGTH 20. + DATA test TYPE REF TO z2ui5_cl_srtti_elemdescr. + + srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ). + + TRY. + test ?= srtti. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_elemdescr' ). + ENDTRY. + ENDMETHOD. + + METHOD create_by_rtti_intf. + DATA variable TYPE REF TO lcl_any. + DATA rtti_classdescr TYPE REF TO cl_abap_classdescr. + DATA rtti_intf TYPE REF TO cl_abap_intfdescr. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA test TYPE REF TO z2ui5_cl_srtti_intfdescr. + + CREATE OBJECT variable TYPE lcl_any. + rtti_classdescr ?= cl_abap_typedescr=>describe_by_object_ref( variable ). + rtti_intf = rtti_classdescr->get_interface_type( 'LIF_ANY' ). + srtti = z2ui5_cl_srtti_typedescr=>create_by_rtti( rtti_intf ). + + TRY. + test ?= srtti. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_intfdescr' ). + ENDTRY. + ENDMETHOD. + + METHOD create_by_rtti_struct. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA test TYPE REF TO z2ui5_cl_srtti_structdescr. + DATA: + BEGIN OF variable, + comp1 TYPE c LENGTH 20, + END OF variable. + + srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ). + + TRY. + test ?= srtti. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_structdescr' ). + ENDTRY. + ENDMETHOD. + + METHOD create_by_rtti_table. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA test TYPE REF TO z2ui5_cl_srtti_structdescr. + DATA: + BEGIN OF variable, + comp1 TYPE c LENGTH 20, + END OF variable. + + srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ). + + TRY. + test ?= srtti. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_structdescr' ). + ENDTRY. + ENDMETHOD. + + METHOD create_by_rtti_ref. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA variable TYPE REF TO flag. + DATA test TYPE REF TO z2ui5_cl_srtti_refdescr. + + srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( variable ). + + TRY. + test ?= srtti. + CATCH cx_sy_move_cast_error. + cl_abap_unit_assert=>fail( 'is instance of zcl_srtti_refdescr' ). + ENDTRY. + ENDMETHOD. + + METHOD technical_type. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA dobj_with_bound_data_type TYPE c LENGTH 20. + + srtti = z2ui5_cl_srtti_typedescr=>create_by_data_object( dobj_with_bound_data_type ). + cl_abap_unit_assert=>assert_true( msg = 'technical_type' + act = srtti->technical_type ). + ENDMETHOD. +ENDCLASS. + + +CLASS ltc_serialize_deserialize IMPLEMENTATION. + METHOD assert_equal_serializ_deserial. + DATA srtti TYPE REF TO z2ui5_cl_srtti_typedescr. + DATA rtti_after TYPE REF TO cl_abap_typedescr. + + srtti = z2ui5_cl_srtti_typedescr=>create_by_rtti( rtti = rtti_before ). + + rtti_after = srtti->get_rtti( ). + + cl_abap_unit_assert=>assert_bound( msg = 'result bound' + act = rtti_after ). + cl_abap_unit_assert=>assert_equals( msg = 'Type kind' + exp = rtti_before->type_kind + act = rtti_after->type_kind ). + cl_abap_unit_assert=>assert_equals( msg = 'length' + exp = rtti_before->length + act = rtti_after->length ). + cl_abap_unit_assert=>assert_equals( msg = 'decimals' + exp = rtti_before->decimals + act = rtti_after->decimals ). + cl_abap_unit_assert=>assert_equals( msg = 'Kind' + exp = rtti_before->kind + act = rtti_after->kind ). + cl_abap_unit_assert=>assert_equals( msg = 'is_ddic_type' + exp = rtti_before->is_ddic_type( ) + act = rtti_after->is_ddic_type( ) ). + ENDMETHOD. + + METHOD class. + rtti_before = cl_abap_typedescr=>describe_by_data( variables-ref_to_class ). + assert_equal_serializ_deserial( ). + ENDMETHOD. + + METHOD elem. + rtti_before = cl_abap_typedescr=>describe_by_data( variables-char_10 ). + assert_equal_serializ_deserial( ). + ENDMETHOD. + + METHOD intf. + rtti_before = cl_abap_typedescr=>describe_by_data( variables-ref_to_intf ). + assert_equal_serializ_deserial( ). + ENDMETHOD. + + METHOD ref. + rtti_before = cl_abap_typedescr=>describe_by_data( variables-dref ). + assert_equal_serializ_deserial( ). + ENDMETHOD. + + METHOD structure. + rtti_before = cl_abap_typedescr=>describe_by_data( variables-structure ). + assert_equal_serializ_deserial( ). + ENDMETHOD. + + METHOD table. + rtti_before = cl_abap_typedescr=>describe_by_data( variables-table ). + assert_equal_serializ_deserial( ). + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cl_srtti_typedescr.clas.xml b/src/00/02/z2ui5_cl_srtti_typedescr.clas.xml new file mode 100644 index 00000000..09f6f564 --- /dev/null +++ b/src/00/02/z2ui5_cl_srtti_typedescr.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CL_SRTTI_TYPEDESCR + E + Serializable RTTI any type + 1 + X + X + X + X + + + + diff --git a/src/00/02/z2ui5_cx_srtti.clas.abap b/src/00/02/z2ui5_cx_srtti.clas.abap new file mode 100644 index 00000000..2193e565 --- /dev/null +++ b/src/00/02/z2ui5_cx_srtti.clas.abap @@ -0,0 +1,35 @@ +class z2ui5_cx_srtti definition + public + inheriting from CX_NO_CHECK + final + create public . + +public section. + + interfaces IF_T100_MESSAGE . + + methods CONSTRUCTOR + importing + !TEXTID like IF_T100_MESSAGE=>T100KEY optional + !PREVIOUS like PREVIOUS optional . + PROTECTED SECTION. + PRIVATE SECTION. +ENDCLASS. + + + +CLASS z2ui5_cx_srtti IMPLEMENTATION. + + + METHOD constructor ##ADT_SUPPRESS_GENERATION. + CALL METHOD super->constructor + EXPORTING + previous = previous. + CLEAR me->textid. + IF textid IS INITIAL. + if_t100_message~t100key = if_t100_message=>default_textid. + ELSE. + if_t100_message~t100key = textid. + ENDIF. + ENDMETHOD. +ENDCLASS. diff --git a/src/00/02/z2ui5_cx_srtti.clas.xml b/src/00/02/z2ui5_cx_srtti.clas.xml new file mode 100644 index 00000000..84020bf1 --- /dev/null +++ b/src/00/02/z2ui5_cx_srtti.clas.xml @@ -0,0 +1,17 @@ + + + + + + Z2UI5_CX_SRTTI + E + General exception + 40 + 1 + X + X + X + + + + diff --git a/src/01/00/03/package.devc.xml b/src/00/03/package.devc.xml similarity index 100% rename from src/01/00/03/package.devc.xml rename to src/00/03/package.devc.xml diff --git a/src/01/00/03/z2ui5_cl_util.clas.abap b/src/00/03/z2ui5_cl_util.clas.abap similarity index 97% rename from src/01/00/03/z2ui5_cl_util.clas.abap rename to src/00/03/z2ui5_cl_util.clas.abap index 45cef349..a1883bdf 100644 --- a/src/01/00/03/z2ui5_cl_util.clas.abap +++ b/src/00/03/z2ui5_cl_util.clas.abap @@ -1210,7 +1210,7 @@ CLASS z2ui5_cl_util IMPLEMENTATION. METHOD xml_srtti_parse. - check_raise_srtti_installed( ). +* check_raise_srtti_installed( ). DATA srtti TYPE REF TO object. CALL TRANSFORMATION id SOURCE XML rtti_data RESULT srtti = srtti. @@ -1231,17 +1231,39 @@ CLASS z2ui5_cl_util IMPLEMENTATION. METHOD xml_srtti_stringify. - check_raise_srtti_installed( ). + TRY. + DATA(lv_check_srtti_installed) = abap_true. + check_raise_srtti_installed( ). + CATCH cx_root. + lv_check_srtti_installed = abap_false. + ENDTRY. - DATA srtti TYPE REF TO object. - DATA(lv_classname) = 'ZCL_SRTTI_TYPEDESCR'. - CALL METHOD (lv_classname)=>('CREATE_BY_DATA_OBJECT') - EXPORTING - data_object = data - RECEIVING - srtti = srtti. + IF lv_check_srtti_installed = abap_true. - CALL TRANSFORMATION id SOURCE srtti = srtti dobj = data RESULT XML result. + DATA srtti TYPE REF TO object. + DATA(lv_classname) = `ZCL_SRTTI_TYPEDESCR`. + CALL METHOD (lv_classname)=>('CREATE_BY_DATA_OBJECT') + EXPORTING + data_object = data + RECEIVING + srtti = srtti. + + CALL TRANSFORMATION id SOURCE srtti = srtti dobj = data RESULT XML result. + + ELSE. + + "DATA srtti TYPE REF TO object. + lv_classname = 'Z2UI5_CL_SRTTI_TYPEDESCR'. + CALL METHOD (lv_classname)=>('CREATE_BY_DATA_OBJECT') + EXPORTING + data_object = data + RECEIVING + srtti = srtti. + + CALL TRANSFORMATION id SOURCE srtti = srtti dobj = data RESULT XML result. + + + ENDIF. ENDMETHOD. diff --git a/src/01/00/03/z2ui5_cl_util.clas.locals_imp.abap b/src/00/03/z2ui5_cl_util.clas.locals_imp.abap similarity index 100% rename from src/01/00/03/z2ui5_cl_util.clas.locals_imp.abap rename to src/00/03/z2ui5_cl_util.clas.locals_imp.abap diff --git a/src/01/00/03/z2ui5_cl_util.clas.testclasses.abap b/src/00/03/z2ui5_cl_util.clas.testclasses.abap similarity index 100% rename from src/01/00/03/z2ui5_cl_util.clas.testclasses.abap rename to src/00/03/z2ui5_cl_util.clas.testclasses.abap diff --git a/src/01/00/03/z2ui5_cl_util.clas.xml b/src/00/03/z2ui5_cl_util.clas.xml similarity index 100% rename from src/01/00/03/z2ui5_cl_util.clas.xml rename to src/00/03/z2ui5_cl_util.clas.xml diff --git a/src/01/00/03/z2ui5_cx_util_error.clas.abap b/src/00/03/z2ui5_cx_util_error.clas.abap similarity index 100% rename from src/01/00/03/z2ui5_cx_util_error.clas.abap rename to src/00/03/z2ui5_cx_util_error.clas.abap diff --git a/src/01/00/03/z2ui5_cx_util_error.clas.testclasses.abap b/src/00/03/z2ui5_cx_util_error.clas.testclasses.abap similarity index 100% rename from src/01/00/03/z2ui5_cx_util_error.clas.testclasses.abap rename to src/00/03/z2ui5_cx_util_error.clas.testclasses.abap diff --git a/src/01/00/03/z2ui5_cx_util_error.clas.xml b/src/00/03/z2ui5_cx_util_error.clas.xml similarity index 100% rename from src/01/00/03/z2ui5_cx_util_error.clas.xml rename to src/00/03/z2ui5_cx_util_error.clas.xml diff --git a/src/01/00/02/package.devc.xml b/src/00/04/package.devc.xml similarity index 100% rename from src/01/00/02/package.devc.xml rename to src/00/04/package.devc.xml diff --git a/src/01/00/02/z2ui5_cl_abap_api.clas.abap b/src/00/04/z2ui5_cl_abap_api.clas.abap similarity index 100% rename from src/01/00/02/z2ui5_cl_abap_api.clas.abap rename to src/00/04/z2ui5_cl_abap_api.clas.abap diff --git a/src/01/00/02/z2ui5_cl_abap_api.clas.testclasses.abap b/src/00/04/z2ui5_cl_abap_api.clas.testclasses.abap similarity index 100% rename from src/01/00/02/z2ui5_cl_abap_api.clas.testclasses.abap rename to src/00/04/z2ui5_cl_abap_api.clas.testclasses.abap diff --git a/src/01/00/02/z2ui5_cl_abap_api.clas.xml b/src/00/04/z2ui5_cl_abap_api.clas.xml similarity index 100% rename from src/01/00/02/z2ui5_cl_abap_api.clas.xml rename to src/00/04/z2ui5_cl_abap_api.clas.xml diff --git a/src/01/00/02/z2ui5_cl_abap_api_http.clas.abap b/src/00/04/z2ui5_cl_abap_api_http.clas.abap similarity index 100% rename from src/01/00/02/z2ui5_cl_abap_api_http.clas.abap rename to src/00/04/z2ui5_cl_abap_api_http.clas.abap diff --git a/src/01/00/02/z2ui5_cl_abap_api_http.clas.xml b/src/00/04/z2ui5_cl_abap_api_http.clas.xml similarity index 100% rename from src/01/00/02/z2ui5_cl_abap_api_http.clas.xml rename to src/00/04/z2ui5_cl_abap_api_http.clas.xml diff --git a/src/01/00/02/z2ui5_cx_abap_api.clas.abap b/src/00/04/z2ui5_cx_abap_api.clas.abap similarity index 100% rename from src/01/00/02/z2ui5_cx_abap_api.clas.abap rename to src/00/04/z2ui5_cx_abap_api.clas.abap diff --git a/src/01/00/02/z2ui5_cx_abap_api.clas.testclasses.abap b/src/00/04/z2ui5_cx_abap_api.clas.testclasses.abap similarity index 100% rename from src/01/00/02/z2ui5_cx_abap_api.clas.testclasses.abap rename to src/00/04/z2ui5_cx_abap_api.clas.testclasses.abap diff --git a/src/01/00/02/z2ui5_cx_abap_api.clas.xml b/src/00/04/z2ui5_cx_abap_api.clas.xml similarity index 100% rename from src/01/00/02/z2ui5_cx_abap_api.clas.xml rename to src/00/04/z2ui5_cx_abap_api.clas.xml diff --git a/src/01/00/package.devc.xml b/src/00/package.devc.xml similarity index 100% rename from src/01/00/package.devc.xml rename to src/00/package.devc.xml diff --git a/src/01/02/z2ui5_cl_core_srv_attri.clas.abap b/src/01/02/z2ui5_cl_core_srv_attri.clas.abap index 8eb0b4c5..98335c5f 100644 --- a/src/01/02/z2ui5_cl_core_srv_attri.clas.abap +++ b/src/01/02/z2ui5_cl_core_srv_attri.clas.abap @@ -180,15 +180,6 @@ CLASS z2ui5_cl_core_srv_attri IMPLEMENTATION. TRY. lr_attri->r_ref = attri_get_val_ref( lr_attri->name ). lr_attri->o_typedescr = cl_abap_datadescr=>describe_by_data_ref( lr_attri->r_ref ). - -* TRY. -* CAST cl_abap_refdescr( lr_attri->o_typedescr ). -* IF lr_attri->r_ref IS INITIAL. -* DELETE mt_attri->*. -* ENDIF. -* CATCH cx_root. -* ENDTRY. - CATCH cx_root. ENDTRY. ENDLOOP. diff --git a/src/01/02/z2ui5_cl_core_srv_json.clas.abap b/src/01/02/z2ui5_cl_core_srv_json.clas.abap index 2e718210..413f0a13 100644 --- a/src/01/02/z2ui5_cl_core_srv_json.clas.abap +++ b/src/01/02/z2ui5_cl_core_srv_json.clas.abap @@ -103,7 +103,7 @@ CLASS Z2UI5_CL_CORE_SRV_JSON IMPLEMENTATION. IF sy-subrc <> 0. CONTINUE. ENDIF. -* ASSERT sy-subrc = 0. + ajson->set( iv_ignore_empty = abap_false iv_path = `/` iv_val = ).