From 18691ba46fe8a18d49f0f5b9d6c4c125bedc50d9 Mon Sep 17 00:00:00 2001 From: flaiker Date: Mon, 26 Dec 2016 18:23:39 +0100 Subject: [PATCH 1/6] Pull up members to processor base class --- src/proc/zcl_aap_proc_base.clas.abap | 103 ++++++++++++++++++++------- 1 file changed, 78 insertions(+), 25 deletions(-) diff --git a/src/proc/zcl_aap_proc_base.clas.abap b/src/proc/zcl_aap_proc_base.clas.abap index d057caf..d4c70e0 100644 --- a/src/proc/zcl_aap_proc_base.clas.abap +++ b/src/proc/zcl_aap_proc_base.clas.abap @@ -1,3 +1,4 @@ +"! Processor base class CLASS zcl_aap_proc_base DEFINITION PUBLIC ABSTRACT @@ -6,31 +7,33 @@ CLASS zcl_aap_proc_base DEFINITION PUBLIC SECTION. METHODS: "! Check if an annotation is present by classname - "! @parameter iv_classname | - "! @parameter rv_present | - is_annotation_present_by_name ABSTRACT IMPORTING iv_classname TYPE abap_classname - RETURNING VALUE(rv_present) TYPE abap_bool, - "! - "! @parameter io_descr | - "! @parameter rv_present | - is_annotation_present_by_descr ABSTRACT IMPORTING io_descr TYPE REF TO cl_abap_classdescr - RETURNING VALUE(rv_present) TYPE abap_bool, - "! - "! @parameter iv_annotation_key | - "! @parameter ro_annotation | - "! @raising zcx_aap_illegal_argument | - get_annotation_by_name ABSTRACT IMPORTING iv_classname TYPE abap_classname - RETURNING VALUE(ro_annotation) TYPE REF TO zcl_aap_annotation_base - RAISING zcx_aap_illegal_argument, - "! - "! @parameter io_descr | - "! @parameter ro_annotation | - "! @raising zcx_aap_illegal_argument | - get_annotation_by_descr ABSTRACT IMPORTING io_descr TYPE REF TO cl_abap_classdescr - RETURNING VALUE(ro_annotation) TYPE REF TO zcl_aap_annotation_base - RAISING zcx_aap_illegal_argument, - "! - "! @parameter rt_annotations | + "! @parameter iv_classname | Annotation class name + "! @parameter rv_present | Annotation is present + is_annotation_present_by_name IMPORTING iv_classname TYPE abap_classname + RETURNING VALUE(rv_present) TYPE abap_bool, + "! Check if an annotation is present by descriptor + "! @parameter io_descr | Descriptor instance + "! @parameter rv_present | Annotation is present + "! @raising zcx_aap_illegal_argument | io_descr cannot be null + is_annotation_present_by_descr IMPORTING io_descr TYPE REF TO cl_abap_classdescr + RETURNING VALUE(rv_present) TYPE abap_bool + RAISING zcx_aap_illegal_argument, + "! Get an annotation instance by its name + "! @parameter iv_classname | Annotation class name + "! @parameter ro_annotation | Found annotation class instance + "! @raising zcx_aap_illegal_argument | Annotation class not present + get_annotation_by_name IMPORTING iv_classname TYPE abap_classname + RETURNING VALUE(ro_annotation) TYPE REF TO zcl_aap_annotation_base + RAISING zcx_aap_illegal_argument, + "! Get an annotation instance by descriptor + "! @parameter io_descr | Descriptor instance + "! @parameter ro_annotation | Found annotation class instance + "! @raising zcx_aap_illegal_argument | io_descr cannot be null or annotation not present + get_annotation_by_descr IMPORTING io_descr TYPE REF TO cl_abap_classdescr + RETURNING VALUE(ro_annotation) TYPE REF TO zcl_aap_annotation_base + RAISING zcx_aap_illegal_argument, + "! Get all annotations directly associated to this processor + "! @parameter rt_annotations | Associated annotations get_annotations ABSTRACT RETURNING VALUE(rt_annotations) TYPE zif_aap_annotation_resolver=>gty_annotation_tab, "! Force populate internal caches recursively (disables loading on demand) load_all ABSTRACT. @@ -57,4 +60,54 @@ CLASS zcl_aap_proc_base IMPLEMENTATION. METHOD get_resolver. ri_resolver = mi_resolver. ENDMETHOD. + + METHOD get_annotation_by_descr. + DATA(lt_annotations) = get_annotations( ). + + zcx_aap_illegal_argument=>raise_if_nullpointer( iv_name = 'IO_DESCR' + io_ref = io_descr ) ##NO_TEXT. + + TRY. + ro_annotation = lt_annotations[ descriptor = io_descr ]-instance. + CATCH cx_sy_itab_line_not_found INTO DATA(lx_ex). + MESSAGE e018(zaap) WITH io_descr->get_relative_name( ) INTO DATA(lv_msg). + RAISE EXCEPTION TYPE zcx_aap_illegal_argument + EXPORTING + is_textid = zcx_aap_illegal_argument=>gc_with_name_and_reason + ix_previous = lx_ex + iv_name = 'IO_DESCR' + iv_reason = lv_msg ##NO_TEXT. + ENDTRY. + ENDMETHOD. + + METHOD get_annotation_by_name. + DATA(lt_annotations) = get_annotations( ). + + TRY. + ro_annotation = lt_annotations[ classname = iv_classname ]-instance. + CATCH cx_sy_itab_line_not_found INTO DATA(lx_ex). + MESSAGE e018(zaap) WITH iv_classname INTO DATA(lv_msg). + RAISE EXCEPTION TYPE zcx_aap_illegal_argument + EXPORTING + is_textid = zcx_aap_illegal_argument=>gc_with_name_and_reason + ix_previous = lx_ex + iv_name = 'IV_CLASSNAME' + iv_reason = lv_msg + iv_value = iv_classname ##NO_TEXT. + ENDTRY. + ENDMETHOD. + + METHOD is_annotation_present_by_descr. + DATA(lt_annotations) = get_annotations( ). + + zcx_aap_illegal_argument=>raise_if_nullpointer( iv_name = 'IO_DESCR' + io_ref = io_descr ) ##NO_TEXT. + + rv_present = boolc( line_exists( lt_annotations[ descriptor = io_descr ] ) ). + ENDMETHOD. + + METHOD is_annotation_present_by_name. + DATA(lt_annotations) = get_annotations( ). + rv_present = boolc( line_exists( lt_annotations[ classname = iv_classname ] ) ). + ENDMETHOD. ENDCLASS. \ No newline at end of file From cc71cc55d77b264109c08dddf032194c836cf02f Mon Sep 17 00:00:00 2001 From: flaiker Date: Mon, 26 Dec 2016 18:24:04 +0100 Subject: [PATCH 2/6] Implement parameter processor --- src/proc/zcl_aap_proc_parameter.clas.abap | 55 ++++++++++++++--------- src/zaap.msag.xml | 6 +++ 2 files changed, 40 insertions(+), 21 deletions(-) diff --git a/src/proc/zcl_aap_proc_parameter.clas.abap b/src/proc/zcl_aap_proc_parameter.clas.abap index 273f121..81aa956 100644 --- a/src/proc/zcl_aap_proc_parameter.clas.abap +++ b/src/proc/zcl_aap_proc_parameter.clas.abap @@ -1,45 +1,58 @@ +"! Parameter processor CLASS zcl_aap_proc_parameter DEFINITION PUBLIC FINAL INHERITING FROM zcl_aap_proc_base - CREATE PRIVATE. + CREATE PRIVATE + GLOBAL FRIENDS zcl_aap_proc_method. PUBLIC SECTION. METHODS: load_all REDEFINITION, - is_annotation_present_by_name REDEFINITION, - is_annotation_present_by_descr REDEFINITION, - get_annotation_by_name REDEFINITION, - get_annotation_by_descr REDEFINITION, get_annotations REDEFINITION. + DATA: + "! Parameter description + ms_parameter_description TYPE abap_parmdescr READ-ONLY, + "! Name of the containing class or interface + mv_containing_object_name TYPE abap_classname, + "! Name of the containing method + mv_containing_method_name TYPE abap_methname, + "! Name of the parameter in its containing method + mv_parameter_name TYPE abap_parmname. PROTECTED SECTION. PRIVATE SECTION. + METHODS: + constructor IMPORTING is_parameter_description TYPE abap_parmdescr + iv_containing_object_name TYPE abap_classname + iv_containing_method_name TYPE abap_methname. ENDCLASS. CLASS zcl_aap_proc_parameter IMPLEMENTATION. - METHOD load_all. - - ENDMETHOD. + METHOD constructor. + super->constructor( ). - METHOD get_annotations. + ASSERT: is_parameter_description IS NOT INITIAL, + iv_containing_method_name IS NOT INITIAL, + iv_containing_object_name IS NOT INITIAL. + ms_parameter_description = is_parameter_description. + mv_containing_method_name = iv_containing_method_name. + mv_containing_object_name = iv_containing_object_name. + mv_parameter_name = is_parameter_description-name. ENDMETHOD. - METHOD get_annotation_by_descr. - + METHOD load_all ##NEEDED. + " Nothing to load here ENDMETHOD. - METHOD get_annotation_by_name. - - ENDMETHOD. - - METHOD is_annotation_present_by_descr. - - ENDMETHOD. - - METHOD is_annotation_present_by_name. - + METHOD get_annotations. + " TODO: Think of propagating the exception in some way + rt_annotations = get_resolver( )->get_annotations_for_parameter( + iv_containing_object_name = mv_containing_object_name + iv_containing_method_name = mv_containing_method_name + iv_parameter_name = mv_parameter_name + ). ENDMETHOD. ENDCLASS. \ No newline at end of file diff --git a/src/zaap.msag.xml b/src/zaap.msag.xml index 1e92046..7bc182a 100644 --- a/src/zaap.msag.xml +++ b/src/zaap.msag.xml @@ -127,6 +127,12 @@ 018 Annotation of type '&1' not present. + + E + ZAAP + 019 + Processor for parameter '&1' does not exist. + From 079d8316996be9536bdd4d5619c1278a4290d47b Mon Sep 17 00:00:00 2001 From: flaiker Date: Mon, 26 Dec 2016 18:24:45 +0100 Subject: [PATCH 3/6] Implement attribute processor --- src/proc/zcl_aap_proc_attribute.clas.abap | 49 +++++++++++++---------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/src/proc/zcl_aap_proc_attribute.clas.abap b/src/proc/zcl_aap_proc_attribute.clas.abap index 58e3374..0f57176 100644 --- a/src/proc/zcl_aap_proc_attribute.clas.abap +++ b/src/proc/zcl_aap_proc_attribute.clas.abap @@ -1,45 +1,52 @@ +"! Attribute processor CLASS zcl_aap_proc_attribute DEFINITION PUBLIC FINAL INHERITING FROM zcl_aap_proc_base - CREATE PRIVATE. + CREATE PRIVATE + GLOBAL FRIENDS zcl_aap_proc_object. PUBLIC SECTION. METHODS: load_all REDEFINITION, - is_annotation_present_by_name REDEFINITION, - is_annotation_present_by_descr REDEFINITION, - get_annotation_by_name REDEFINITION, - get_annotation_by_descr REDEFINITION, get_annotations REDEFINITION. + DATA: + "! Name of the containing class or interface + mv_containing_object_name TYPE abap_classname READ-ONLY, + "! Attribute description + ms_attribute_description TYPE abap_attrdescr READ-ONLY, + "! Attribute name in its containing object + mv_attribute_name TYPE abap_attrname READ-ONLY. PROTECTED SECTION. PRIVATE SECTION. + METHODS: + constructor IMPORTING is_attribute_description TYPE abap_attrdescr + iv_containing_object_name TYPE abap_classname. ENDCLASS. CLASS zcl_aap_proc_attribute IMPLEMENTATION. - METHOD load_all. - - ENDMETHOD. + METHOD constructor. + super->constructor( ). - METHOD get_annotations. + ASSERT: iv_containing_object_name IS NOT INITIAL, + is_attribute_description IS NOT INITIAL. + mv_containing_object_name = iv_containing_object_name. + ms_attribute_description = is_attribute_description. + mv_attribute_name = is_attribute_description-name. ENDMETHOD. - METHOD get_annotation_by_descr. - + METHOD load_all ##NEEDED. + " Nothing to do here ENDMETHOD. - METHOD get_annotation_by_name. - - ENDMETHOD. - - METHOD is_annotation_present_by_descr. - - ENDMETHOD. - - METHOD is_annotation_present_by_name. - + METHOD get_annotations. + " TODO: Think of propagating the exception in some way + rt_annotations = get_resolver( )->get_annotations_for_attribute( + iv_containing_object_name = mv_containing_object_name + iv_attribute_name = mv_attribute_name + ). ENDMETHOD. ENDCLASS. \ No newline at end of file From 8ebdb3b1544b52a101cf2c72b96be7d39566149f Mon Sep 17 00:00:00 2001 From: flaiker Date: Mon, 26 Dec 2016 18:25:11 +0100 Subject: [PATCH 4/6] Implement method processor --- src/proc/zcl_aap_proc_method.clas.abap | 98 ++++++++++++++++++++------ src/proc/zcl_aap_proc_method.clas.xml | 2 +- 2 files changed, 78 insertions(+), 22 deletions(-) diff --git a/src/proc/zcl_aap_proc_method.clas.abap b/src/proc/zcl_aap_proc_method.clas.abap index e2c435f..6d88abd 100644 --- a/src/proc/zcl_aap_proc_method.clas.abap +++ b/src/proc/zcl_aap_proc_method.clas.abap @@ -1,54 +1,110 @@ +"! Method processor CLASS zcl_aap_proc_method DEFINITION PUBLIC FINAL INHERITING FROM zcl_aap_proc_base - CREATE PUBLIC. + CREATE PRIVATE + GLOBAL FRIENDS zcl_aap_proc_object. PUBLIC SECTION. + TYPES: + BEGIN OF gty_parameter_proc, + parameter_name TYPE abap_parmname, + processor TYPE REF TO zcl_aap_proc_parameter, + END OF gty_parameter_proc, + gty_parameter_proc_tab TYPE SORTED TABLE OF gty_parameter_proc + WITH UNIQUE KEY parameter_name. METHODS: - "! - "! @parameter ro_processor | - get_parameter_processor RETURNING VALUE(ro_processor) TYPE REF TO zcl_aap_proc_parameter, + "! Get all parameter processors + "! @parameter rt_processors | Parameter processors + get_parameter_processors RETURNING VALUE(rt_processors) TYPE gty_parameter_proc_tab, + "! Get parameter processor by name + "! @parameter iv_parameter_name | Parameter name + "! @parameter ro_processor | Found parameter processor + "! @raising zcx_aap_illegal_argument | Parameter does not exist + get_parameter_processor IMPORTING iv_parameter_name TYPE abap_parmname + RETURNING VALUE(ro_processor) TYPE REF TO zcl_aap_proc_parameter + RAISING zcx_aap_illegal_argument, load_all REDEFINITION, - is_annotation_present_by_name REDEFINITION, - is_annotation_present_by_descr REDEFINITION, - get_annotation_by_name REDEFINITION, - get_annotation_by_descr REDEFINITION, get_annotations REDEFINITION. DATA: - mv_method_name TYPE abap_methname READ-ONLY. + "! Name of the containing class or interface + mv_containing_object_name TYPE abap_classname READ-ONLY, + "! Name of the method in its containing object + mv_method_name TYPE abap_methname READ-ONLY, + "! Method description + ms_method_description TYPE abap_methdescr READ-ONLY. PROTECTED SECTION. PRIVATE SECTION. + METHODS: + constructor IMPORTING is_methdescr TYPE abap_methdescr + iv_containing_object_name TYPE abap_classname, + load_parameters. + DATA: + mt_parameter_processor_cache TYPE gty_parameter_proc_tab. ENDCLASS. CLASS zcl_aap_proc_method IMPLEMENTATION. - METHOD load_all. + METHOD constructor. + super->constructor( ). - ENDMETHOD. - - METHOD get_annotations. + ASSERT: is_methdescr IS NOT INITIAL, + iv_containing_object_name IS NOT INITIAL. + ms_method_description = is_methdescr. + mv_method_name = is_methdescr-name. + mv_containing_object_name = iv_containing_object_name. ENDMETHOD. - METHOD get_annotation_by_descr. + METHOD load_all. ENDMETHOD. - METHOD get_annotation_by_name. - + METHOD get_annotations. + " TODO: Think of propagating the exception in some way + rt_annotations = get_resolver( )->get_annotations_for_method( + iv_containing_object_name = mv_containing_object_name + iv_method_name = mv_method_name + ). ENDMETHOD. - METHOD get_parameter_processor. + METHOD get_parameter_processors. + " On demand lazy loading of processors + IF lines( mt_parameter_processor_cache ) = 0. + load_parameters( ). + ENDIF. + rt_processors = mt_parameter_processor_cache. ENDMETHOD. - METHOD is_annotation_present_by_descr. - + METHOD get_parameter_processor. + DATA(lt_processors) = get_parameter_processors( ). + + TRY. + ro_processor = lt_processors[ parameter_name = iv_parameter_name ]-processor. + CATCH cx_sy_itab_line_not_found INTO DATA(lx_ex). + MESSAGE e019(zaap) WITH iv_parameter_name INTO DATA(lv_reason). + RAISE EXCEPTION TYPE zcx_aap_illegal_argument + EXPORTING + is_textid = zcx_aap_illegal_argument=>gc_with_name_and_reason + ix_previous = lx_ex + iv_name = 'IV_PARAMETER_NAME' + iv_reason = lv_reason + iv_value = iv_parameter_name ##NO_TEXT. + ENDTRY. ENDMETHOD. - METHOD is_annotation_present_by_name. - + METHOD load_parameters. + LOOP AT ms_method_description-parameters ASSIGNING FIELD-SYMBOL(). + INSERT VALUE #( parameter_name = -name + processor = NEW zcl_aap_proc_parameter( + is_parameter_description = + iv_containing_object_name = mv_containing_object_name + iv_containing_method_name = mv_method_name + ) + ) INTO TABLE mt_parameter_processor_cache. + ENDLOOP. ENDMETHOD. ENDCLASS. \ No newline at end of file diff --git a/src/proc/zcl_aap_proc_method.clas.xml b/src/proc/zcl_aap_proc_method.clas.xml index 4aad46d..14f870c 100644 --- a/src/proc/zcl_aap_proc_method.clas.xml +++ b/src/proc/zcl_aap_proc_method.clas.xml @@ -9,7 +9,7 @@ Method processor 00 - 2 + 0 1 0 From abe9042a680308120fffe4681941c9468a91b11c Mon Sep 17 00:00:00 2001 From: flaiker Date: Mon, 26 Dec 2016 18:26:00 +0100 Subject: [PATCH 5/6] Fixup and refactor object processor --- src/proc/zcl_aap_proc_object.clas.abap | 101 +++++++------------------ 1 file changed, 27 insertions(+), 74 deletions(-) diff --git a/src/proc/zcl_aap_proc_object.clas.abap b/src/proc/zcl_aap_proc_object.clas.abap index 1cbe584..6cc1738 100644 --- a/src/proc/zcl_aap_proc_object.clas.abap +++ b/src/proc/zcl_aap_proc_object.clas.abap @@ -1,4 +1,8 @@ "! Object processor +"!

+"! Entry point to get annotations processor intances. Use from_...-factory-methods to +"! obtain an instance. +"!

CLASS zcl_aap_proc_object DEFINITION PUBLIC INHERITING FROM zcl_aap_proc_base @@ -73,33 +77,32 @@ CLASS zcl_aap_proc_object DEFINITION METHODS: "! Get method processor by name "! @parameter iv_method_name | Method name - "! @parameter ro_processor | Created processor + "! @parameter ro_processor | Found method processor "! @raising zcx_aap_illegal_argument | Method does not exist get_method_processor IMPORTING iv_method_name TYPE abap_methname RETURNING VALUE(ro_processor) TYPE REF TO zcl_aap_proc_method RAISING zcx_aap_illegal_argument, "! Get attribute processor by name "! @parameter iv_attribute_name | Attribute name - "! @parameter ro_processor | Created processor + "! @parameter ro_processor | Found attribute processor "! @raising zcx_aap_illegal_argument | Attribute does not exist get_attribute_processor IMPORTING iv_attribute_name TYPE abap_attrname RETURNING VALUE(ro_processor) TYPE REF TO zcl_aap_proc_attribute RAISING zcx_aap_illegal_argument, "! Get all method processors - "! @parameter rt_processors | Created processors + "! @parameter rt_processors | Method processors get_method_processors RETURNING VALUE(rt_processors) TYPE gty_method_proc_tab, "! Get all attribute processors - "! @parameter rt_processors | Created processors + "! @parameter rt_processors | Attribute processors get_attribute_processors RETURNING VALUE(rt_processors) TYPE gty_attribute_proc_tab, load_all REDEFINITION, - is_annotation_present_by_name REDEFINITION, - is_annotation_present_by_descr REDEFINITION, - get_annotation_by_name REDEFINITION, - get_annotation_by_descr REDEFINITION, get_annotations REDEFINITION. DATA: + "! Object descriptor mo_object_descr TYPE REF TO cl_abap_objectdescr READ-ONLY, + "! Relative classname mv_classname_relative TYPE abap_classname READ-ONLY, + "! Absolute classname mv_classname_absolute TYPE string READ-ONLY. PROTECTED SECTION. PRIVATE SECTION. @@ -124,7 +127,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ). ENDMETHOD. - METHOD from_name. cl_abap_typedescr=>describe_by_name( EXPORTING @@ -150,14 +152,12 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ro_processor = from_descriptor( CAST #( lo_descr ) ). ENDMETHOD. - METHOD from_object. ro_processor = from_descriptor( CAST #( cl_abap_typedescr=>describe_by_object_ref( ii_annotatable ) ) ). ENDMETHOD. - METHOD from_descriptor. zcx_aap_illegal_argument=>raise_if_nullpointer( io_ref = io_descr iv_name = 'IO_DESCR' ) ##NO_TEXT. @@ -172,7 +172,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ro_processor = NEW #( io_descr ). ENDMETHOD. - METHOD constructor. super->constructor( ). @@ -189,45 +188,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. rt_annotations = get_resolver( )->get_annotations_for_object( mv_classname_relative ). ENDMETHOD. - - METHOD get_annotation_by_descr. - DATA(lt_annotations) = get_annotations( ). - - zcx_aap_illegal_argument=>raise_if_nullpointer( iv_name = 'IO_DESCR' - io_ref = io_descr ) ##NO_TEXT. - - TRY. - ro_annotation = lt_annotations[ descriptor = io_descr ]-instance. - CATCH cx_sy_itab_line_not_found INTO DATA(lx_ex). - MESSAGE e018(zaap) WITH io_descr->get_relative_name( ) INTO DATA(lv_msg). - RAISE EXCEPTION TYPE zcx_aap_illegal_argument - EXPORTING - is_textid = zcx_aap_illegal_argument=>gc_with_name_and_reason - ix_previous = lx_ex - iv_name = 'IO_DESCR' - iv_reason = lv_msg ##NO_TEXT. - ENDTRY. - ENDMETHOD. - - - METHOD get_annotation_by_name. - DATA(lt_annotations) = get_annotations( ). - - TRY. - ro_annotation = lt_annotations[ classname = iv_classname ]-instance. - CATCH cx_sy_itab_line_not_found INTO DATA(lx_ex). - MESSAGE e018(zaap) WITH iv_classname INTO DATA(lv_msg). - RAISE EXCEPTION TYPE zcx_aap_illegal_argument - EXPORTING - is_textid = zcx_aap_illegal_argument=>gc_with_name_and_reason - ix_previous = lx_ex - iv_name = 'IV_CLASSNAME' - iv_reason = lv_msg - iv_value = iv_classname ##NO_TEXT. - ENDTRY. - ENDMETHOD. - - METHOD get_attribute_processor. DATA(lt_processors) = get_attribute_processors( ). @@ -245,7 +205,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ENDTRY. ENDMETHOD. - METHOD get_attribute_processors. " On demand lazy loading of processors IF lines( mt_attribute_processor_cache ) = 0. @@ -255,7 +214,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. rt_processors = mt_attribute_processor_cache. ENDMETHOD. - METHOD get_method_processor. DATA(lt_processors) = get_method_processors( ). @@ -273,7 +231,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ENDTRY. ENDMETHOD. - METHOD get_method_processors. " On demand lazy loading of processors IF lines( mt_method_processor_cache ) = 0. @@ -283,19 +240,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. rt_processors = mt_method_processor_cache. ENDMETHOD. - - METHOD is_annotation_present_by_descr. - DATA(lt_annotations) = get_annotations( ). - rv_present = boolc( line_exists( lt_annotations[ descriptor = io_descr ] ) ). - ENDMETHOD. - - - METHOD is_annotation_present_by_name. - DATA(lt_annotations) = get_annotations( ). - rv_present = boolc( line_exists( lt_annotations[ classname = iv_classname ] ) ). - ENDMETHOD. - - METHOD is_object_relevant_by_descr. zcx_aap_illegal_argument=>raise_if_nullpointer( io_ref = io_descr iv_name = 'IO_DESCR' ) ##NO_TEXT. @@ -313,7 +257,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ) ) ). ENDMETHOD. - METHOD is_object_relevant_by_name. cl_abap_typedescr=>describe_by_name( EXPORTING @@ -339,7 +282,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. rv_relevant = is_object_relevant_by_descr( CAST #( lo_descr ) ). ENDMETHOD. - METHOD is_object_relevant_by_ref. zcx_aap_illegal_argument=>raise_if_nullpointer( io_ref = io_object iv_name = 'IO_OBJECT' ) ##NO_TEXT. @@ -349,7 +291,6 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ) ). ENDMETHOD. - METHOD load_all. IF lines( mt_attribute_processor_cache ) = 0. load_attributes( ). @@ -368,13 +309,25 @@ CLASS zcl_aap_proc_object IMPLEMENTATION. ENDLOOP. ENDMETHOD. - METHOD load_attributes. - + LOOP AT mo_object_descr->attributes ASSIGNING FIELD-SYMBOL(). + INSERT VALUE #( attribute_name = -name + processor = NEW zcl_aap_proc_attribute( + is_attribute_description = + iv_containing_object_name = mv_classname_relative + ) + ) INTO TABLE mt_attribute_processor_cache. + ENDLOOP. ENDMETHOD. - METHOD load_methods. - + LOOP AT mo_object_descr->methods ASSIGNING FIELD-SYMBOL(). + INSERT VALUE #( method_name = -name + processor = NEW zcl_aap_proc_method( + is_methdescr = + iv_containing_object_name = mv_classname_relative + ) + ) INTO TABLE mt_method_processor_cache. + ENDLOOP. ENDMETHOD. ENDCLASS. \ No newline at end of file From 998a81b4c4f851eeaef2af4a7cd4ff6be434167c Mon Sep 17 00:00:00 2001 From: flaiker Date: Mon, 26 Dec 2016 18:26:34 +0100 Subject: [PATCH 6/6] Add assertion in resolver switcher --- src/test/ztcl_aap_test_resolv_switcher.clas.abap | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/ztcl_aap_test_resolv_switcher.clas.abap b/src/test/ztcl_aap_test_resolv_switcher.clas.abap index 0511288..e8ed62d 100644 --- a/src/test/ztcl_aap_test_resolv_switcher.clas.abap +++ b/src/test/ztcl_aap_test_resolv_switcher.clas.abap @@ -18,6 +18,7 @@ ENDCLASS. CLASS ztcl_aap_test_resolv_switcher IMPLEMENTATION. METHOD switch_default_resolver. + ASSERT ii_resolver IS BOUND. zcl_aap_resolver_injector=>gi_resolver = ii_resolver. ENDMETHOD. ENDCLASS. \ No newline at end of file