1:- module(aop_inspection,[
2
3 enable_aspect/1,
4 disable_aspect/1,
5
6 enable_extension/3,
7 disable_extension/3,
8
9 current_enabled_aspect/1,
10 current_enabled_aspect/2,
11 current_disabled_aspect/1,
12 current_aspect/1,
13 current_object/1,
14 current_method/1
15 ]). 16
20
22:- dynamic(aop:aspect/1). 23:- multifile(aop:aspect/1). 24
26:- dynamic(aop:aspect_module/2). 27:- multifile(aop:aspect_module/2). 28
29:- dynamic(aop:aspect_enabled/2). 30:- multifile(aop:aspect_enabled/2). 31
33:- dynamic(aop:object/3). 34:- multifile(aop:object/3). 35
37:- dynamic(aop:augmented/3). 38:- multifile(aop:augmented/3). 39
41:- dynamic(aop:method/3). 42:- discontiguous(aop:method/3). 43:- multifile(aop:method/3). 44
46:- dynamic(aop:method_signature/5). 47:- discontiguous(aop:method_signature/5). 48:- multifile(aop:method_signature/5). 49
51:- dynamic(aop:extension/3). 52:- discontiguous(aop:extension/3). 53:- multifile(aop:extension/3). 54
56enable_extension(Aspect, Object, Name/Arity) :-
57 aop:extension(Aspect, Object, Name/Arity)
58 -> true
59 ; assertz(aop:extension(Aspect, Object, Name/Arity)).
60
62disable_extension(Aspect, Object, Name/Arity) :-
63 retractall(aop:extension(Aspect, Object, Name/Arity)).
64
68enable_aspect(Aspect) :-
69 retractall(aop:aspect_enabled(Aspect,_)),
70 assertz(aop:aspect_enabled(Aspect, true)).
71
72disable_aspect(Aspect) :-
73 retractall(aop:aspect_enabled(Aspect,_)),
74 assertz(aop:aspect_enabled(Aspect, false)).
75
79current_enabled_aspect(Aspect) :-
80 current_aspect(Aspect),
81 aop:aspect_enabled(Aspect,true).
82
83current_enabled_aspect(Aspect, Module) :-
84 current_enabled_aspect(Aspect),
85 aop:aspect_module(Aspect, Module),
86 aop:aspect_enabled(Aspect,true).
87
88current_disabled_aspect(Aspect) :-
89 current_aspect(Aspect),
90 aop:aspect_enabled(Aspect,false).
91
92current_aspect(Aspect) :-
93 aop:aspect(Aspect).
94
95current_object(Def) :-
96 aop:object(Aspect, Object, Module),
97 Def = aop:object(Aspect, Object, Module).
98
99current_method(Def) :-
100 aop:method(Aspect, Object, Message),
101 Def = aop:method(Aspect, Object, Message)