summaryrefslogtreecommitdiffstats
path: root/docs/progGuideDB/quickreference.xml
diff options
context:
space:
mode:
Diffstat (limited to 'docs/progGuideDB/quickreference.xml')
-rw-r--r--docs/progGuideDB/quickreference.xml1452
1 files changed, 769 insertions, 683 deletions
diff --git a/docs/progGuideDB/quickreference.xml b/docs/progGuideDB/quickreference.xml
index 4f72dbb7c..6a5d83052 100644
--- a/docs/progGuideDB/quickreference.xml
+++ b/docs/progGuideDB/quickreference.xml
@@ -1,687 +1,773 @@
-<appendix id="quickreference" xreflabel="AspectJ Quick Reference">
-
+<appendix id="quick" xreflabel="AspectJ Quick Reference">
<title>AspectJ Quick Reference</title>
- <indexterm><primary>AspectJ</primary><secondary>semantics</secondary>
- <tertiary>quick reference</tertiary>
- </indexterm>
-
- <sect1>
- <title>Pointcut Designators</title>
-
- <table frame="all" id="qrpointcutdesignators">
- <title>Pointcut Designators</title>
-
- <tgroup cols="2" align="left">
- <colspec colname="c1"/>
- <colspec colname="c2"/>
- <spanspec spanname="hspan" namest="c1" nameend="c2" align="left"/>
-
- <tbody valign="middle">
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Methods and Constructors</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>call(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- Method or constructor call join points when the signature
- matches <replaceable>Signature</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>execution(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- Method or constructor execution join points when the
- signature matches
- <replaceable>Signature</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>initialization(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- Object initialization join point when the first
- constructor called in the type matches
- <replaceable>Signature</replaceable>
- </entry>
- </row>
- <row>
- <entry>
- <literal>preinitialization(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- Object pre-initialization join point when the first constructor
- called in the type matches <replaceable>Signature</replaceable>
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Exception Handlers</emphasis>
- </entry>
- </row>
-
- <row rowsep="1">
- <entry>
- <literal>handler(<replaceable>TypePattern</replaceable>)</literal>
- </entry>
- <entry>
- Exception handler execution join points when
- try handlers for the throwable types in
- <replaceable>TypePattern</replaceable> are executed.
- The exception object can be accessed with an
- <literal>args</literal> pointcut.
- </entry>
- </row>
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Advice</emphasis>
- </entry>
- </row>
-
- <row rowsep="1">
- <entry>
- <literal>adviceexecution()</literal>
- </entry>
- <entry>
- All advice execution join points.
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Fields</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>get(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- Field reference join points when the field matches
- <replaceable>Signature</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>set(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- Field assignment join points when the field matches
- <replaceable>Signature</replaceable>. The new value
- can be accessed with an <literal>args</literal>
- pointcut.
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Static Initializers</emphasis>
- </entry>
- </row>
-
- <row rowsep="1">
- <entry>
- <literal>staticinitialization(<replaceable>TypePattern</replaceable>)</literal>
- </entry>
- <entry>
- Static initializer execution join points for the types in
- <replaceable>TypePattern</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Objects</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>this(<replaceable>Type</replaceable>)</literal>
- </entry>
- <entry>
- Join points when the currently executing object is an
- instance of <replaceable>Type</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>target(<replaceable>Type</replaceable>)</literal>
- </entry>
- <entry>
- Join points when the target object is an instance
- of <replaceable>Type</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>args(<replaceable>Type</replaceable>, ...)</literal>
- </entry>
- <entry>
- Join points when the argument objects are instances of
- the <replaceable>Type</replaceable>s
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Lexical Extents</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>within(<replaceable>TypePattern</replaceable>)</literal>
- </entry>
- <entry>
- Join points when the code executing is defined in the
- types in <replaceable>TypePattern</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>withincode(<replaceable>Signature</replaceable>)</literal>
- </entry>
- <entry>
- Join points when the code executing is defined in the
- method or constructor with signature
- <replaceable>Signature</replaceable>
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Control Flow</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- Join points in the control flow of the join points
- specified by <replaceable>Pointcut</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- Join points in the control flow below the join points
- specified by <replaceable>Pointcut</replaceable>
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Conditional</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>if(<replaceable>Expression</replaceable>)</literal>
- </entry>
- <entry>
- Join points when the boolean
- <replaceable>Expression</replaceable> evaluates
- to <literal>true</literal>
- </entry>
- </row>
-
- <row>
- <entry spanname="hspan">
- <emphasis role="bold">Combination</emphasis>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>! <replaceable>Pointcut</replaceable></literal>
- </entry>
- <entry>
- Join points that are not picked out by
- <replaceable>Pointcut</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal><replaceable>Pointcut0</replaceable> <![CDATA[&&]]> <replaceable>Pointcut1</replaceable></literal>
- </entry>
- <entry>
- Join points that are picked out by both
- <replaceable>Pointcut0</replaceable> and
- <replaceable>Pointcut1</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal><replaceable>Pointcut0</replaceable> || <replaceable>Pointcut1</replaceable></literal>
- </entry>
- <entry>
- Join points that are picked out by either
- <replaceable>Pointcut0</replaceable> or
- <replaceable>Pointcut1</replaceable>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>( <replaceable>Pointcut</replaceable> )</literal>
- </entry>
- <entry>
- Join points that are picked out by the parenthesized
- <replaceable>Pointcut</replaceable>
- </entry>
- </row>
-
- </tbody>
- </tgroup>
-
- </table>
-
- </sect1>
-
- <sect1>
- <title>Type Patterns</title>
- <para>
- </para>
-
- <table frame="all" id="qrtypenamepatterns">
- <title>Type Name Patterns</title>
- <tgroup cols="2" colsep="1" rowsep="0">
- <tbody>
- <row>
- <entry><literal>*</literal> alone</entry>
- <entry>all types</entry>
- </row>
- <row>
- <entry><literal>*</literal> in an identifier</entry>
- <entry>any sequence of characters, not including "."</entry>
- </row>
- <row>
- <entry><literal>..</literal> in an identifier</entry>
- <entry>any sequence of characters starting and ending
- with "."</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>
- The + wildcard can be appended to a type name pattern to
- indicate all subtypes.
- </para>
-
- <para>
- Any number of []s can be put on a type name or subtype pattern
- to indicate array types.
- </para>
-
- <table frame="all" id="qrtypepatterns">
- <title>Type Patterns</title>
- <tgroup cols="2" colsep="1" rowsep="0">
- <tbody>
- <row>
- <entry><replaceable>TypeNamePattern</replaceable></entry>
- <entry>all types in <replaceable>TypeNamePattern</replaceable></entry>
- </row>
- <row>
- <entry><replaceable>SubtypePattern</replaceable></entry>
- <entry>all types in <replaceable>SubtypePattern</replaceable>, a
- pattern with a +. </entry>
- </row>
- <row>
- <entry><replaceable>ArrayTypePattern</replaceable></entry>
- <entry>all types in <replaceable>ArrayTypePattern</replaceable>,
- a pattern with one or more []s. </entry>
- </row>
- <row>
- <entry><literal>!<replaceable>TypePattern</replaceable></literal></entry>
- <entry>all types not in <replaceable>TypePattern</replaceable></entry>
- </row>
- <row>
- <entry><literal><replaceable>TypePattern0</replaceable>
- <![CDATA[&&]]> <replaceable>TypePattern1</replaceable></literal></entry>
- <entry>all types in both
- <replaceable>TypePattern0</replaceable> and <replaceable>TypePattern1</replaceable></entry>
- </row>
- <row>
- <entry><literal><replaceable>TypePattern0</replaceable> || <replaceable>TypePattern1</replaceable></literal></entry>
- <entry>all types in either
- <replaceable>TypePattern0</replaceable> or <replaceable>TypePattern1</replaceable></entry>
- </row>
- <row>
- <entry><literal>( <replaceable>TypePattern</replaceable> )</literal></entry>
- <entry>all types in <replaceable>TypePattern</replaceable></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- </sect1>
-
- <sect1>
- <title>Advice</title>
-
- <para></para>
- <table frame="all" id="qradvice">
- <title>Advice</title>
- <tgroup cols="2" colsep="1" rowsep="0">
- <tbody>
-
- <row>
- <entry>
- <literal>before(<replaceable>Formals</replaceable>) : </literal>
- </entry>
- <entry>
- Run before the join point.
- </entry>
- </row>
-
-
- <row>
- <entry>
- <literal>after(<replaceable>Formals</replaceable>) returning
- [ (<replaceable>Formal</replaceable>) ] : </literal>
- </entry>
- <entry>
- Run after the join point if it returns normally. The
- optional formal gives access to the returned value.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>after(<replaceable>Formals</replaceable>) throwing [
- (<replaceable>Formal</replaceable>) ] : </literal>
- </entry>
- <entry>
- Run after the join point if it throws an exception. The
- optional formal gives access to the
- <literal>Throwable</literal> exception value.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>after(<replaceable>Formals</replaceable>) : </literal>
- </entry>
- <entry>
- Run after the join point both when it returns normally and
- when it throws an exception.
- </entry>
- </row>
-
- <row>
- <entry>
+
+ <sect1 id="quick-pointcuts">
+ <title>Pointcuts</title>
+
+ <informaltable frame="none">
+ <tgroup cols="2" align="left">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+
+ <tbody valign="top">
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Methods and Constructors</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>call(<replaceable>Signature</replaceable>)</literal>
+ </entry>
+
+ <entry>
+ every call to any method or constructor matching
+ <replaceable>Signature</replaceable> at the call site
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>execution(<replaceable>Signature</replaceable>)</literal>
+ </entry>
+
+ <entry>
+ every execution of any method or constructor matching
+ <replaceable>Signature</replaceable>
+ </entry>
+ </row>
+
+
+ <!-- ===== -->
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Fields</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>get(<replaceable>Signature</replaceable>)</literal>
+ </entry>
+ <entry>
+ every reference to any field matching <replaceable>Signature</replaceable>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>set(<replaceable>Signature</replaceable>)</literal>
+ </entry>
+ <entry>
+ every assignment to any field matching
+ <replaceable>Signature</replaceable>. The assigned value can
+ be exposed with an <literal>args</literal> pointcut
+ </entry>
+ </row>
+
+ <!-- ===== -->
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Exception Handlers</emphasis>
+ </entry>
+ </row>
+
+ <row rowsep="1">
+ <entry>
+ <literal>handler(<replaceable>TypePattern</replaceable>)</literal>
+ </entry>
+ <entry>
+ every exception handler for any <literal>Throwable</literal>
+ type in <replaceable>TypePattern</replaceable>. The exception
+ value can be exposed with an <literal>args</literal> pointcut
+ </entry>
+ </row>
+
+ <!-- ===== -->
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Advice</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>adviceexecution()</literal>
+ </entry>
+ <entry>
+ every execution of any piece of advice
+ </entry>
+ </row>
+
+ <!-- ===== -->
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Initialization</emphasis>
+ </entry>
+ </row>
+
+ <row rowsep="1">
+ <entry>
+ <literal>staticinitialization(<replaceable>TypePattern</replaceable>)</literal>
+ </entry>
+ <entry>
+ every execution of a static initializer for any type in
+ <replaceable>TypePattern</replaceable>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>initialization(<replaceable>Signature</replaceable>)</literal>
+ </entry>
+ <entry>
+ every initialization of an object when the first constructor
+ called in the type matches
+ <replaceable>Signature</replaceable>, encompassing the return
+ from the super constructor call to the return of the
+ first-called constructor
+ </entry>
+ </row>
+ <row>
+ <entry>
+ <literal>preinitialization(<replaceable>Signature</replaceable>)</literal>
+ </entry>
+ <entry>
+ every pre-initialization of an object when the first
+ constructor called in the type matches
+ <replaceable>Signature</replaceable>, encompassing the entry
+ of the first-called constructor to the call to the super
+ constructor
+ </entry>
+ </row>
+
+ <!-- ===== -->
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Lexical</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>within(<replaceable>TypePattern</replaceable>)</literal>
+ </entry>
+ <entry>
+ every join point from code defined in a type in
+ <replaceable>TypePattern</replaceable>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>withincode(<replaceable>Signature</replaceable>)</literal>
+ </entry>
+ <entry>
+ every join point from code defined in a method or constructor
+ matching <replaceable>Signature</replaceable>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+
+ <tgroup cols="2" align="left">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+ <tbody valign="top">
+ <row>
+ <entry namest="c1" nameend="c2" >
+ <emphasis role="bold">Instanceof checks and context exposure</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>this(<replaceable>Type</replaceable> or <replaceable>Id</replaceable>)</literal>
+ </entry>
+ <entry>
+ every join point when the currently executing object is an
+ instance of <replaceable>Type</replaceable> or
+ <replaceable>Id</replaceable>'s type
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>target(<replaceable>Type</replaceable> or <replaceable>Id</replaceable>)</literal>
+ </entry>
+ <entry>
+ every join point when the target executing object is an
+ instance of <replaceable>Type</replaceable> or
+ <replaceable>Id</replaceable>'s type
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>args(<replaceable>Type</replaceable> or
+ <replaceable>Id</replaceable>, ...)</literal>
+ </entry>
+ <entry>
+ every join point when the arguments are instances of
+ <replaceable>Type</replaceable>s or the types of the
+ <replaceable>Id</replaceable>s
+ </entry>
+ </row>
+
+ <!-- ===== -->
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Control Flow</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ <entry>
+ every join point in the control flow of each join point
+ <replaceable>P</replaceable> picked out by
+ <replaceable>Pointcut</replaceable>, including
+ <replaceable>P</replaceable> itself
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ <entry>
+ every join point below the control flow of each join point
+ <replaceable>P</replaceable> picked out by
+ <replaceable>Pointcut</replaceable>; does not include
+ <replaceable>P</replaceable> itself
+ </entry>
+ </row>
+
+ <!-- ===== -->
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Conditional</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>if(<replaceable>Expression</replaceable>)</literal>
+ </entry>
+ <entry>
+ every join point when the boolean
+ <replaceable>Expression</replaceable> is
+ <literal>true</literal>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+
+ <tgroup cols="2" align="left">
+ <colspec colname="c1"/>
+ <colspec colname="c2"/>
+
+ <tbody valign="top">
+ <row>
+ <entry namest="c1" nameend="c2">
+ <emphasis role="bold">Combination</emphasis>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>! <replaceable>Pointcut</replaceable></literal>
+ </entry>
+ <entry>
+ every join point not picked out by
+ <replaceable>Pointcut</replaceable>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal><replaceable>Pointcut0</replaceable> <![CDATA[&&]]> <replaceable>Pointcut1</replaceable></literal>
+ </entry>
+ <entry>
+ each join point picked out by both
+ <replaceable>Pointcut0</replaceable> and
+ <replaceable>Pointcut1</replaceable>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal><replaceable>Pointcut0</replaceable> || <replaceable>Pointcut1</replaceable></literal>
+ </entry>
+ <entry>
+ each join point picked out by either
+ <replaceable>Pointcut0</replaceable> or
+ <replaceable>Pointcut1</replaceable>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>( <replaceable>Pointcut</replaceable> )</literal>
+ </entry>
+ <entry>
+ each join point picked out by
+ <replaceable>Pointcut</replaceable>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect1>
+
+<!-- ============================== -->
+
+ <sect1 id="quick-typePatterns">
+ <title>Type Patterns</title>
+
+ <para>
+ A type pattern is one of
+ </para>
+
+ <informaltable frame="none">
+ <tgroup cols="2" >
+ <tbody valign="top">
+ <row>
+ <entry><replaceable>TypeNamePattern</replaceable></entry>
+ <entry>all types in <replaceable>TypeNamePattern</replaceable></entry>
+ </row>
+ <row>
+ <entry><replaceable>SubtypePattern</replaceable></entry>
+ <entry>all types in <replaceable>SubtypePattern</replaceable>, a
+ pattern with a +. </entry>
+ </row>
+ <row>
+ <entry><replaceable>ArrayTypePattern</replaceable></entry>
+ <entry>all types in <replaceable>ArrayTypePattern</replaceable>,
+ a pattern with one or more []s. </entry>
+ </row>
+ <row>
+ <entry><literal>!<replaceable>TypePattern</replaceable></literal></entry>
+ <entry>all types not in <replaceable>TypePattern</replaceable></entry>
+ </row>
+ <row>
+ <entry><literal><replaceable>TypePattern0</replaceable>
+ <![CDATA[&&]]> <replaceable>TypePattern1</replaceable></literal></entry>
+ <entry>all types in both
+ <replaceable>TypePattern0</replaceable> and <replaceable>TypePattern1</replaceable></entry>
+ </row>
+ <row>
+ <entry><literal><replaceable>TypePattern0</replaceable> || <replaceable>TypePattern1</replaceable></literal></entry>
+ <entry>all types in either
+ <replaceable>TypePattern0</replaceable> or <replaceable>TypePattern1</replaceable></entry>
+ </row>
+ <row>
+ <entry><literal>( <replaceable>TypePattern</replaceable> )</literal></entry>
+ <entry>all types in <replaceable>TypePattern</replaceable></entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+
+ <para>
+ where <replaceable>TypeNamePattern</replaceable> can either be a
+ plain type name, the wildcard <literal>*</literal> (indicating all
+ types), or an identifier with embedded <literal>*</literal> and
+ <literal>..</literal> wildcards.
+ </para>
+
+ <para>
+ An embedded <literal>*</literal> in an identifier matches any
+ sequence of characters, but does not match the package (or
+ inner-type) separator ".".
+ </para>
+
+ <para>
+ An embedded <literal>..</literal> in an identifier matches any
+ sequence of characters that starts and ends with the package (or
+ inner-type) separator ".".
+ </para>
+ </sect1>
+
+<!-- ============================== -->
+
+ <sect1 id="quick-advice">
+ <title>Advice</title>
+
+ <para>
+ Each piece of advice is of the form
+
+ <blockquote>
+ <literal>[ strictfp ] <replaceable>AdviceSpec</replaceable>
+ [ throws <replaceable>TypeList</replaceable> ] :
+ <replaceable>Pointcut</replaceable> {
+ <replaceable>Body</replaceable> } </literal>
+ </blockquote>
+
+ where <replaceable>AdviceSpec</replaceable> is one of
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <literal>before( <replaceable>Formals</replaceable> ) </literal>
+ </term>
+ <listitem>
+ runs before each join point
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>after( <replaceable>Formals</replaceable> ) returning
+ [ ( <replaceable>Formal</replaceable> ) ] </literal>
+ </term>
+ <listitem>
+ runs after each join point that returns normally. The
+ optional formal gives access to the returned value
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>after( <replaceable>Formals</replaceable> ) throwing [
+ ( <replaceable>Formal</replaceable> ) ] </literal>
+ </term>
+ <listitem>
+ runs after each join point that throws a
+ <literal>Throwable</literal>. If the optional formal is
+ present, runs only after each join point that throws a
+ <literal>Throwable</literal> of the type of
+ <replaceable>Formal</replaceable>, and
+ <replaceable>Formal</replaceable> gives access to the
+ <literal>Throwable</literal> exception value
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <literal>after( <replaceable>Formals</replaceable> ) </literal>
+ </term>
+ <listitem>
+ runs after each join point regardless of whether it returns
+ normally or throws a <literal>Throwable</literal>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
<literal><replaceable>Type</replaceable>
- around(<replaceable>Formals</replaceable>) [ throws
- <replaceable>TypeList</replaceable> ] :</literal>
- </entry>
- <entry>
- Run instead of the join point. The join point can be
- executed by calling <literal>proceed</literal>.
- </entry>
- </row>
-
- </tbody>
- </tgroup>
- </table>
- </sect1>
-
- <sect1>
- <title>Inter-type declarations</title>
- <para>
- </para>
-
- <table frame="all" id="qrintroduction">
- <title>Inter-type declarations</title>
-
- <tgroup cols="2" colsep="1" rowsep="0">
-
- <tbody>
-
- <row>
- <entry>
- <replaceable>Modifiers ReturnType OnType . Id(Formals) { Body }</replaceable>
- </entry>
- <entry>
- Defines a method on <replaceable>OnType</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>abstract <replaceable>Modifiers ReturnType OnType . Id(Formals)</replaceable>;</literal>
- </entry>
- <entry>
- Defines an abstract method on <replaceable>OnType</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal><replaceable>Modifiers OnType</replaceable>.new<replaceable>(Formals) { Body }</replaceable></literal>
- </entry>
- <entry>
- Defines a a constructor on <replaceable>OnType</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry>
- <replaceable>Modifiers Type OnType.Id [ = Expression ];</replaceable>
- </entry>
- <entry>
- Defines a field on <replaceable>OnType</replaceable>.
- </entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- </sect1>
-
- <sect1>
- <title>Other declarations</title>
- <para>
- </para>
-
- <table frame="all" id="qrotherdeclarations">
- <title>Other declarations</title>
-
- <tgroup cols="2" colsep="1" rowsep="0">
-
- <tbody>
-
- <row>
- <entry>
- <literal>declare parents: <replaceable>TypePattern</replaceable> extends <replaceable>TypeList</replaceable>;</literal>
- </entry>
- <entry>
- Declares that the types in <replaceable>TypePattern</replaceable> extend the types of <replaceable>TypeList</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>declare parents: <replaceable>TypePattern</replaceable> implements <replaceable>TypeList</replaceable>;</literal>
- </entry>
- <entry>
- Declares that the types in <replaceable>TypePattern</replaceable> implement the types of <replaceable>TypeList</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>declare warning: <replaceable>Pointcut</replaceable>: <replaceable>String</replaceable>;</literal>
- </entry>
- <entry>
- Declares that if any of the join points in
- <replaceable>Pointcut</replaceable> possibly exist in
- the program, the compiler should emit a warning of
- <replaceable>String</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>declare error: <replaceable>Pointcut</replaceable>: <replaceable>String</replaceable>;</literal>
- </entry>
- <entry>
- Declares that if any of the join points in
- <replaceable>Pointcut</replaceable> possibly exist in
- the program, the compiler should emit an error of
- <replaceable>String</replaceable>.
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>declare soft:
- <replaceable>TypePattern</replaceable>:
- <replaceable>Pointcut</replaceable>; </literal>
- </entry>
- <entry>
- Declares that any exception of a type in
- <replaceable>TypePattern</replaceable> that gets
- thrown at any join point picked out by
- <replaceable>Pointcut</replaceable> will be wrapped in
- <literal>org.aspectj.lang.SoftException</literal>.
- </entry>
- </row>
- <row>
- <entry>
- <literal>declare precedence:
- <replaceable>TypePatternList</replaceable> ; </literal>
- </entry>
- <entry>
- Declares that at any join point where multiple pieces of advice
- apply, the advice precedence at that join point is in
- <replaceable>TypePatternList</replaceable> order.
- </entry>
- </row>
-
- </tbody>
- </tgroup>
- </table>
-
- </sect1>
-
- <sect1>
- <title>Aspect Associations</title>
- <para>
- </para>
-
- <table frame="all" id="qrassociations">
- <title>Associations</title>
- <tgroup cols="3" align="left" colsep="1" rowsep="1">
- <thead>
- <row>
- <entry>modifier</entry>
- <entry>Description</entry>
- <entry>Accessor</entry>
- </row>
- </thead>
-
- <tbody>
-
- <row>
- <entry>
- [ <literal>issingleton</literal> ]
- </entry>
- <entry>
- One instance of the aspect is made. This is
- the default.
- </entry>
- <entry>
- <literal>aspectOf()</literal> at all join points
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>perthis(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- An instance is associated with each object that is the
- currently executing object at any join point in
- <replaceable>Pointcut</replaceable>.
- </entry>
- <entry>
- <literal>aspectOf(Object)</literal> at all join points</entry>
- </row>
-
- <row>
- <entry>
- <literal>pertarget(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- An instance is associated with each object that is the
- target object at any join point in
- <replaceable>Pointcut</replaceable>.
- </entry>
- <entry>
- <literal>aspectOf(Object)</literal> at all join points</entry>
- </row>
-
- <row>
- <entry>
- <literal>percflow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- The aspect is defined for each entrance to the control flow of
- the join points defined by <replaceable>Pointcut</replaceable>. </entry>
- <entry>
- <literal>aspectOf()</literal> at join points in
- <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- </row>
-
- <row>
- <entry>
- <literal>percflowbelow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- <entry>
- The aspect is defined for each entrance to the control flow
- below the join points defined by <replaceable>Pointcut</replaceable>.
- </entry>
- <entry>
- <literal>aspectOf()</literal> at join points in
- <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
- </entry>
- </row>
- </tbody>
-
- </tgroup>
- </table>
- </sect1>
+ around( <replaceable>Formals</replaceable> ) </literal>
+ </term>
+ <listitem>
+ runs in place of each join point. The join point can be
+ executed by calling <literal>proceed</literal>, which takes
+ the same number and types of arguments as the around advice.
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>
+ Three special variables are available inside of advice bodies:
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <literal>thisJoinPoint</literal>
+ </term>
+ <listitem>
+ an object of type <ulink
+ url="../api/org/aspectj/lang/JoinPoint.html"><literal>org.aspectj.lang.JoinPoint</literal></ulink>
+ representing the join point at which the advice is executing.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>thisJoinPointStaticPart</literal>
+ </term>
+ <listitem>
+ equivalent to <literal>thisJoinPoint.getStaticPart()</literal>,
+ but may use fewer runtime resources.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>thisEnclosingJoinPointStaticPart</literal>
+ </term>
+ <listitem>
+ the static part of the dynamically enclosing join point.
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect1>
+
+<!-- ============================== -->
+
+ <sect1 id="quick-interType">
+ <title>Inter-type member declarations</title>
+
+ <para>
+ Each inter-type member is one of
+ </para>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <literal>
+ <replaceable>Modifiers ReturnType OnType . Id</replaceable>
+ ( <replaceable>Formals</replaceable> )
+ [ throws <replaceable>TypeList</replaceable> ]
+ { <replaceable>Body</replaceable> }
+ </literal>
+ </term>
+ <listitem>
+ a method on <replaceable>OnType</replaceable>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>
+ abstract <replaceable>Modifiers ReturnType OnType . Id</replaceable>
+ ( <replaceable>Formals</replaceable> )
+ [ throws <replaceable>TypeList</replaceable> ] ;
+ </literal>
+ </term>
+ <listitem>
+ an abstract method on <replaceable>OnType</replaceable>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>
+ <replaceable>Modifiers OnType . </replaceable> new
+ ( <replaceable>Formals</replaceable> )
+ [ throws <replaceable>TypeList</replaceable> ]
+ { <replaceable>Body</replaceable> }
+ </literal>
+ </term>
+ <listitem>
+ a constructor on <replaceable>OnType</replaceable>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>
+ <replaceable>Modifiers Type OnType . Id </replaceable>
+ [ = <replaceable>Expression</replaceable> ] ;
+ </literal>
+ </term>
+ <listitem>
+ a field on <replaceable>OnType</replaceable>.
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect1>
+
+<!-- ============================== -->
+
+ <sect1 id="quick-other">
+ <title>Other declarations</title>
+
+ <variablelist>
+ <varlistentry>
+ <term>
+ <literal>
+ declare parents :
+ <replaceable>TypePattern</replaceable> extends
+ <replaceable>Type</replaceable> ;
+ </literal>
+ </term>
+ <listitem>
+ the types in <replaceable>TypePattern</replaceable> extend
+ <replaceable>Type</replaceable>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>
+ declare parents : <replaceable>TypePattern</replaceable>
+ implements <replaceable>TypeList</replaceable> ;
+ </literal>
+ </term>
+ <listitem>
+ the types in <replaceable>TypePattern</replaceable>
+ implement the types in <replaceable>TypeList</replaceable>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>
+ declare warning : <replaceable>Pointcut</replaceable> :
+ <replaceable>String</replaceable> ;
+ </literal>
+ </term>
+ <listitem>
+ if any of the join points in <replaceable>Pointcut</replaceable>
+ possibly exist in the program, the compiler emits the warning
+ <replaceable>String</replaceable>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>
+ declare error : <replaceable>Pointcut</replaceable> :
+ <replaceable>String</replaceable> ;
+ </literal>
+ </term>
+ <listitem>
+ if any of the join points in <replaceable>Pointcut</replaceable>
+ could possibly exist in the program, the compiler emits the
+ error <replaceable>String</replaceable>.
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
+ <literal>
+ declare soft :
+ <replaceable>Type</replaceable> :
+ <replaceable>Pointcut</replaceable> ;
+ </literal>
+ </term>
+ <listitem>
+ any <replaceable>Type</replaceable> exception
+ that gets thrown at any join point picked out by
+ <replaceable>Pointcut</replaceable> is wrapped in <ulink
+ url="../api/org/aspectj/lang/SoftException.html"><literal>org.aspectj.lang.SoftException</literal></ulink>.
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <literal>
+ declare precedence :
+ <replaceable>TypePatternList</replaceable> ;
+ </literal>
+ </term>
+ <listitem>
+ at any join point where multiple pieces of advice
+ apply, the advice precedence at that join point is in
+ <replaceable>TypePatternList</replaceable> order.
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect1>
+
+<!-- ============================== -->
+
+ <sect1 id="quick-aspectAssociations">
+ <title>Aspects</title>
+
+ <para>
+ Each aspect is of the form
+
+ <blockquote>
+ <literal>
+ [ privileged ] <replaceable>Modifiers</replaceable>
+ aspect <replaceable>Id</replaceable>
+ [ extends <replaceable>Type</replaceable> ]
+ [ implements <replaceable>TypeList</replaceable> ]
+ [ <replaceable>PerClause</replaceable> ]
+ { <replaceable>Body</replaceable> }
+ </literal>
+ </blockquote>
+ where <replaceable>PerClause</replaceable> defines how the aspect is
+ instantiated and associated (<literal>issingleton</literal> by
+ default):
+ </para>
+
+ <informaltable frame="none">
+ <tgroup cols="3" align="left">
+ <thead>
+ <row>
+ <entry align="left">PerClause</entry>
+ <entry align="left">Description</entry>
+ <entry align="left">Accessor</entry>
+ </row>
+ </thead>
+
+ <tbody valign="top">
+ <row>
+ <entry>
+ [ <literal>issingleton</literal> ]
+ </entry>
+ <entry>
+ One instance of the aspect is made. This is
+ the default.
+ </entry>
+ <entry>
+ <literal>aspectOf()</literal> at all join points
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>perthis(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ <entry>
+ An instance is associated with each object that is the
+ currently executing object at any join point in
+ <replaceable>Pointcut</replaceable>.
+ </entry>
+ <entry>
+ <literal>aspectOf(Object)</literal> at all join points
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>pertarget(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ <entry>
+ An instance is associated with each object that is the
+ target object at any join point in
+ <replaceable>Pointcut</replaceable>.
+ </entry>
+ <entry>
+ <literal>aspectOf(Object)</literal> at all join points
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>percflow(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ <entry>
+ The aspect is defined for each entrance to the control flow of
+ the join points defined by <replaceable>Pointcut</replaceable>. </entry>
+ <entry>
+ <literal>aspectOf()</literal> at join points in
+ <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ </row>
+
+ <row>
+ <entry>
+ <literal>percflowbelow(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ <entry>
+ The aspect is defined for each entrance to the control flow
+ below the join points defined by <replaceable>Pointcut</replaceable>.
+ </entry>
+ <entry>
+ <literal>aspectOf()</literal> at join points in
+ <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
+ </entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </informaltable>
+ </sect1>
+
</appendix>
-<!-- Local variables: -->
-<!-- fill-column: 79 -->
-<!-- sgml-local-ecat-files: progguide.ced -->
-<!-- sgml-parent-document:("progguide.sgml" "book" "appendix") -->
-<!-- End: -->