summaryrefslogtreecommitdiffstats
path: root/loadtime/src/aspectj_1_5_0.dtd
blob: 0609627456ebd3687836bc59712ed9af995406b9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<!--*****************************************************************************************************************************
/*******************************************************************************
 * Copyright (c) 2005 Contributors.
 * All rights reserved.
 * This program and the accompanying materials are made available
 * under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution and is available at
 * http://eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *   Alexandre Vasseur         initial implementation
 *******************************************************************************/
AspectJ 5 DTD

To use this DTD, start your defintion file with
	<!DOCTYPE aspectj PUBLIC
	    "-//AspectJ//DTD 1.5.0//EN"
	    "http://.../dtd/aspectj_1_5_0.dtd">

You can also use the "aliasing DTD" that matchs always the latest release of AspectJ
<!DOCTYPE aspectj PUBLIC
    "-//AspectJ//DTD//EN"
    "http://.../dtd/aspectj.dtd">

To not use this DTD, start your definition file with
	<?xml version="1.0"?>

******************************************************************************************************************************-->


<!--*****************************************************************************************************************************
aspectj
*********************************************************************************************************************************
[aspectj] defines the root element
******************************************************************************************************************************-->
<!ELEMENT aspectj (
    weaver?,
    aspects?
)>
<!--*****************************************************************************************************************************
weaver
*********************************************************************************************************************************
[weaver] defines the weaver configuration
@options defines a command like line of option
    When multiple aspectj DD are found, the options are simply toggled
    TODO: Note: the scope of the options can be ClassLoader aware but should be assumed JVM wide
******************************************************************************************************************************-->
<!ELEMENT weaver (
    (include | exclude | dump)*
)>
<!ATTLIST weaver
    options CDATA #IMPLIED
>
<!--*****************************************************************************************************************************
include
*********************************************************************************************************************************
[include] narrows the scope of the weaver
A class must be matched by ALL the include elements to be exposed to the weaver
@within defines a type pattern
    (it is not a startWith)
******************************************************************************************************************************-->
<!ELEMENT include EMPTY>
<!ATTLIST include
    within CDATA #REQUIRED
>
<!--*****************************************************************************************************************************
exclude
*********************************************************************************************************************************
[exclude] narrows the scope of the weaver
A class must be matched by NONE of the exclude elements to be exposed to the weaver
@within defines a type pattern
    (it is not a startWith)
    TODO should it be called @from: "<exclude from=..>  instead of <exclude within=..>
    TODO: AND must be written that way and not with the "&&" symbol. Thus NOT and OR exists as well.
******************************************************************************************************************************-->
<!ELEMENT exclude EMPTY>
<!ATTLIST exclude
    within CDATA #REQUIRED
>
<!--*****************************************************************************************************************************
dump
*********************************************************************************************************************************
[dump] control post-weaving dump to the "./_dump" folder (debugging purpose only)
@within defines a type pattern
    (it is not a startWith)
******************************************************************************************************************************-->
<!ELEMENT dump EMPTY>
<!ATTLIST dump
    within CDATA #REQUIRED
>
<!--*****************************************************************************************************************************
aspects
*********************************************************************************************************************************
[aspects] defines a set of aspects
TODO we were about to use include but it is already used for weaver scope with "within" which is not relevant
for aspects. I (AV) decided to use only aspect and provide include= thru name, and exclude= as exclude.
see sample.
******************************************************************************************************************************-->
<!ELEMENT aspects (
    (aspect | exclude | concrete-aspect)*
)>
<!--*****************************************************************************************************************************
aspect
TODO: did not used include since already used in weaver/include@within and @within does not makes sense
*********************************************************************************************************************************
[aspect] defines an aspect to include
    @name   FQN of the aspect, nested class must use $
******************************************************************************************************************************-->
<!ELEMENT aspect EMPTY>
<!ATTLIST aspect
    name CDATA #REQUIRED
>
<!--*****************************************************************************************************************************
exclude
*********************************************************************************************************************************
[exclude] defines a set of aspect to exclude
    @within within pattern (even from other systems / parent classloader)
SAME AS FOR weaver/exclude
******************************************************************************************************************************-->
<!--*****************************************************************************************************************************
concrete-aspect
*********************************************************************************************************************************
[concrete-aspect] defines a concrete aspect from an abstract one
    @name   FQN of the concrete aspect (use $ for nested class) [will be jit generated]
    @extends FQN of the abstract aspect (use $ for nested class)
******************************************************************************************************************************-->
<!ELEMENT concrete-aspect (
    pointcut+
)>
<!ATTLIST concrete-aspect
    name CDATA #REQUIRED
    extends CDATA #REQUIRED
    precedence CDATA #IMPLIED
>
<!--*****************************************************************************************************************************
pointcut
*********************************************************************************************************************************
[pointcut] defines a concrete pointcut within a concrete aspect from an abstract one
    @name   name of the abstract pointcut (method name, unique in aspect class hierarchy)
    @expression pointcut expression
        Note: for argument binding, the bounded arguments must be present and bounded:
        <pointcut name="myAdvice(int i)" expression="... AND args(i)"/>
        TODO: AND must be written that way and not with the "&&" symbol. Thus NOT and OR exists as well.
******************************************************************************************************************************-->
<!ELEMENT pointcut EMPTY>
<!ATTLIST pointcut
    name CDATA #REQUIRED
    expression CDATA #REQUIRED
>