../../AspectXLib/CodeInstrumentation/Base/aspects/TraceConstructorEntry.axprintf instruction that
writes a message to the output device stating the name of the class
to which it belongs. In this example, the identification of the constructors for which tracing is to
be performed (and which therefore must be modified by the aspect) is done "by class name". This is
probably the simplest approach in AspectX. This aspect defines four advices that describe four separate but related
changes. The first advice inserts the tracing code in the target constructors. The second advice
inserts a new include statement to include the stdio library that is
required by the printf method. The third advice modifies the comments of the
classes that are affected by the change to include a comment that the class code has been
automatically modified by an aspect program. The fourth advice modifies the comment of the
methods that are affected by the change to include a description of the type of change that has
been woven into the code. This sample aspect program targets constructor(s) of all classes
in the base code
Pointcuts | |
| constructor | targetConstructorImplementation |
| Points to the implementations of the constructors that must be modified | |
| constructor_decl | targetConstructorDeclaration |
| Points to all declarations of the target constructors | |
| comment | targetConstructorComment |
| Points to the constructor comments that must be modified | |
| class | targetClass |
| Points to all classes that contain a target constructor | |
| comment | targetClassComment |
| <p> Points to the class comments that must be modified | |
| unit | targetImplementationUnit |
| Points to all the units that contain implementations of constructors that must be
modified | |
Advices | |
| end | insertClassComment |
| Add a comment at the end of the comment of the classes that are modified by other advices | |
| end | insertConstructorComment |
| Add a comment at the end of the comment of the constructors that are modified by other advices | |
| begin | insertTrace |
| Insert the tracing instruction in the target constructor | |
| add | addInclude |
| Add the #include statement for the stdio library | |
targetConstructorDeclaration) points to the method declarations.targetConstructorImplementation it targets all
constructors in the base code.targetConstructorDeclaration pointcut. targetConstructorDeclaration pointcut targetClass
pointcut. Triplet: comment end comment
Refers to global pointcut: comment targetClassComment
Triplet: comment end comment
Refers to global pointcut: comment targetConstructorComment
Triplet: constructor begin codeFragment
value-of with XPath expression that extracts the class name
from scrML. See also the pointcut targetConstructorImplementation.Refers to global pointcut: constructor targetConstructorImplementation
Triplet: unit add include
#include statement for the stdio library.
Inclusion of this library is necessary because the code that is woven into the target constructors
calls the stdio function printf. Note that the code to be added by this advice is
specified using the CDATA section because otherwise the braces around "stdio" would be
interpreted as xml braces by the XWeaver program.Refers to global pointcut: unit targetImplementationUnit