You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

quickreference.xml 24KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773
  1. <appendix id="quick" xreflabel="AspectJ Quick Reference">
  2. <title>AspectJ Quick Reference</title>
  3. <sect1 id="quick-pointcuts">
  4. <title>Pointcuts</title>
  5. <informaltable frame="none">
  6. <tgroup cols="2" align="left">
  7. <colspec colname="c1"/>
  8. <colspec colname="c2"/>
  9. <tbody valign="top">
  10. <row>
  11. <entry namest="c1" nameend="c2">
  12. <emphasis role="bold">Methods and Constructors</emphasis>
  13. </entry>
  14. </row>
  15. <row>
  16. <entry>
  17. <literal>call(<replaceable>Signature</replaceable>)</literal>
  18. </entry>
  19. <entry>
  20. every call to any method or constructor matching
  21. <replaceable>Signature</replaceable> at the call site
  22. </entry>
  23. </row>
  24. <row>
  25. <entry>
  26. <literal>execution(<replaceable>Signature</replaceable>)</literal>
  27. </entry>
  28. <entry>
  29. every execution of any method or constructor matching
  30. <replaceable>Signature</replaceable>
  31. </entry>
  32. </row>
  33. <!-- ===== -->
  34. <row>
  35. <entry namest="c1" nameend="c2">
  36. <emphasis role="bold">Fields</emphasis>
  37. </entry>
  38. </row>
  39. <row>
  40. <entry>
  41. <literal>get(<replaceable>Signature</replaceable>)</literal>
  42. </entry>
  43. <entry>
  44. every reference to any field matching <replaceable>Signature</replaceable>
  45. </entry>
  46. </row>
  47. <row>
  48. <entry>
  49. <literal>set(<replaceable>Signature</replaceable>)</literal>
  50. </entry>
  51. <entry>
  52. every assignment to any field matching
  53. <replaceable>Signature</replaceable>. The assigned value can
  54. be exposed with an <literal>args</literal> pointcut
  55. </entry>
  56. </row>
  57. <!-- ===== -->
  58. <row>
  59. <entry namest="c1" nameend="c2">
  60. <emphasis role="bold">Exception Handlers</emphasis>
  61. </entry>
  62. </row>
  63. <row rowsep="1">
  64. <entry>
  65. <literal>handler(<replaceable>TypePattern</replaceable>)</literal>
  66. </entry>
  67. <entry>
  68. every exception handler for any <literal>Throwable</literal>
  69. type in <replaceable>TypePattern</replaceable>. The exception
  70. value can be exposed with an <literal>args</literal> pointcut
  71. </entry>
  72. </row>
  73. <!-- ===== -->
  74. <row>
  75. <entry namest="c1" nameend="c2">
  76. <emphasis role="bold">Advice</emphasis>
  77. </entry>
  78. </row>
  79. <row>
  80. <entry>
  81. <literal>adviceexecution()</literal>
  82. </entry>
  83. <entry>
  84. every execution of any piece of advice
  85. </entry>
  86. </row>
  87. <!-- ===== -->
  88. <row>
  89. <entry namest="c1" nameend="c2">
  90. <emphasis role="bold">Initialization</emphasis>
  91. </entry>
  92. </row>
  93. <row rowsep="1">
  94. <entry>
  95. <literal>staticinitialization(<replaceable>TypePattern</replaceable>)</literal>
  96. </entry>
  97. <entry>
  98. every execution of a static initializer for any type in
  99. <replaceable>TypePattern</replaceable>
  100. </entry>
  101. </row>
  102. <row>
  103. <entry>
  104. <literal>initialization(<replaceable>Signature</replaceable>)</literal>
  105. </entry>
  106. <entry>
  107. every initialization of an object when the first constructor
  108. called in the type matches
  109. <replaceable>Signature</replaceable>, encompassing the return
  110. from the super constructor call to the return of the
  111. first-called constructor
  112. </entry>
  113. </row>
  114. <row>
  115. <entry>
  116. <literal>preinitialization(<replaceable>Signature</replaceable>)</literal>
  117. </entry>
  118. <entry>
  119. every pre-initialization of an object when the first
  120. constructor called in the type matches
  121. <replaceable>Signature</replaceable>, encompassing the entry
  122. of the first-called constructor to the call to the super
  123. constructor
  124. </entry>
  125. </row>
  126. <!-- ===== -->
  127. <row>
  128. <entry namest="c1" nameend="c2">
  129. <emphasis role="bold">Lexical</emphasis>
  130. </entry>
  131. </row>
  132. <row>
  133. <entry>
  134. <literal>within(<replaceable>TypePattern</replaceable>)</literal>
  135. </entry>
  136. <entry>
  137. every join point from code defined in a type in
  138. <replaceable>TypePattern</replaceable>
  139. </entry>
  140. </row>
  141. <row>
  142. <entry>
  143. <literal>withincode(<replaceable>Signature</replaceable>)</literal>
  144. </entry>
  145. <entry>
  146. every join point from code defined in a method or constructor
  147. matching <replaceable>Signature</replaceable>
  148. </entry>
  149. </row>
  150. </tbody>
  151. </tgroup>
  152. <tgroup cols="2" align="left">
  153. <colspec colname="c1"/>
  154. <colspec colname="c2"/>
  155. <tbody valign="top">
  156. <row>
  157. <entry namest="c1" nameend="c2" >
  158. <emphasis role="bold">Instanceof checks and context exposure</emphasis>
  159. </entry>
  160. </row>
  161. <row>
  162. <entry>
  163. <literal>this(<replaceable>Type</replaceable> or <replaceable>Id</replaceable>)</literal>
  164. </entry>
  165. <entry>
  166. every join point when the currently executing object is an
  167. instance of <replaceable>Type</replaceable> or
  168. <replaceable>Id</replaceable>'s type
  169. </entry>
  170. </row>
  171. <row>
  172. <entry>
  173. <literal>target(<replaceable>Type</replaceable> or <replaceable>Id</replaceable>)</literal>
  174. </entry>
  175. <entry>
  176. every join point when the target executing object is an
  177. instance of <replaceable>Type</replaceable> or
  178. <replaceable>Id</replaceable>'s type
  179. </entry>
  180. </row>
  181. <row>
  182. <entry>
  183. <literal>args(<replaceable>Type</replaceable> or
  184. <replaceable>Id</replaceable>, ...)</literal>
  185. </entry>
  186. <entry>
  187. every join point when the arguments are instances of
  188. <replaceable>Type</replaceable>s or the types of the
  189. <replaceable>Id</replaceable>s
  190. </entry>
  191. </row>
  192. <!-- ===== -->
  193. <row>
  194. <entry namest="c1" nameend="c2">
  195. <emphasis role="bold">Control Flow</emphasis>
  196. </entry>
  197. </row>
  198. <row>
  199. <entry>
  200. <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
  201. </entry>
  202. <entry>
  203. every join point in the control flow of each join point
  204. <replaceable>P</replaceable> picked out by
  205. <replaceable>Pointcut</replaceable>, including
  206. <replaceable>P</replaceable> itself
  207. </entry>
  208. </row>
  209. <row>
  210. <entry>
  211. <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
  212. </entry>
  213. <entry>
  214. every join point below the control flow of each join point
  215. <replaceable>P</replaceable> picked out by
  216. <replaceable>Pointcut</replaceable>; does not include
  217. <replaceable>P</replaceable> itself
  218. </entry>
  219. </row>
  220. <!-- ===== -->
  221. <row>
  222. <entry namest="c1" nameend="c2">
  223. <emphasis role="bold">Conditional</emphasis>
  224. </entry>
  225. </row>
  226. <row>
  227. <entry>
  228. <literal>if(<replaceable>Expression</replaceable>)</literal>
  229. </entry>
  230. <entry>
  231. every join point when the boolean
  232. <replaceable>Expression</replaceable> is
  233. <literal>true</literal>
  234. </entry>
  235. </row>
  236. </tbody>
  237. </tgroup>
  238. <tgroup cols="2" align="left">
  239. <colspec colname="c1"/>
  240. <colspec colname="c2"/>
  241. <tbody valign="top">
  242. <row>
  243. <entry namest="c1" nameend="c2">
  244. <emphasis role="bold">Combination</emphasis>
  245. </entry>
  246. </row>
  247. <row>
  248. <entry>
  249. <literal>! <replaceable>Pointcut</replaceable></literal>
  250. </entry>
  251. <entry>
  252. every join point not picked out by
  253. <replaceable>Pointcut</replaceable>
  254. </entry>
  255. </row>
  256. <row>
  257. <entry>
  258. <literal><replaceable>Pointcut0</replaceable> <![CDATA[&&]]> <replaceable>Pointcut1</replaceable></literal>
  259. </entry>
  260. <entry>
  261. each join point picked out by both
  262. <replaceable>Pointcut0</replaceable> and
  263. <replaceable>Pointcut1</replaceable>
  264. </entry>
  265. </row>
  266. <row>
  267. <entry>
  268. <literal><replaceable>Pointcut0</replaceable> || <replaceable>Pointcut1</replaceable></literal>
  269. </entry>
  270. <entry>
  271. each join point picked out by either
  272. <replaceable>Pointcut0</replaceable> or
  273. <replaceable>Pointcut1</replaceable>
  274. </entry>
  275. </row>
  276. <row>
  277. <entry>
  278. <literal>( <replaceable>Pointcut</replaceable> )</literal>
  279. </entry>
  280. <entry>
  281. each join point picked out by
  282. <replaceable>Pointcut</replaceable>
  283. </entry>
  284. </row>
  285. </tbody>
  286. </tgroup>
  287. </informaltable>
  288. </sect1>
  289. <!-- ============================== -->
  290. <sect1 id="quick-typePatterns">
  291. <title>Type Patterns</title>
  292. <para>
  293. A type pattern is one of
  294. </para>
  295. <informaltable frame="none">
  296. <tgroup cols="2" >
  297. <tbody valign="top">
  298. <row>
  299. <entry><replaceable>TypeNamePattern</replaceable></entry>
  300. <entry>all types in <replaceable>TypeNamePattern</replaceable></entry>
  301. </row>
  302. <row>
  303. <entry><replaceable>SubtypePattern</replaceable></entry>
  304. <entry>all types in <replaceable>SubtypePattern</replaceable>, a
  305. pattern with a +. </entry>
  306. </row>
  307. <row>
  308. <entry><replaceable>ArrayTypePattern</replaceable></entry>
  309. <entry>all types in <replaceable>ArrayTypePattern</replaceable>,
  310. a pattern with one or more []s. </entry>
  311. </row>
  312. <row>
  313. <entry><literal>!<replaceable>TypePattern</replaceable></literal></entry>
  314. <entry>all types not in <replaceable>TypePattern</replaceable></entry>
  315. </row>
  316. <row>
  317. <entry><literal><replaceable>TypePattern0</replaceable>
  318. <![CDATA[&&]]> <replaceable>TypePattern1</replaceable></literal></entry>
  319. <entry>all types in both
  320. <replaceable>TypePattern0</replaceable> and <replaceable>TypePattern1</replaceable></entry>
  321. </row>
  322. <row>
  323. <entry><literal><replaceable>TypePattern0</replaceable> || <replaceable>TypePattern1</replaceable></literal></entry>
  324. <entry>all types in either
  325. <replaceable>TypePattern0</replaceable> or <replaceable>TypePattern1</replaceable></entry>
  326. </row>
  327. <row>
  328. <entry><literal>( <replaceable>TypePattern</replaceable> )</literal></entry>
  329. <entry>all types in <replaceable>TypePattern</replaceable></entry>
  330. </row>
  331. </tbody>
  332. </tgroup>
  333. </informaltable>
  334. <para>
  335. where <replaceable>TypeNamePattern</replaceable> can either be a
  336. plain type name, the wildcard <literal>*</literal> (indicating all
  337. types), or an identifier with embedded <literal>*</literal> and
  338. <literal>..</literal> wildcards.
  339. </para>
  340. <para>
  341. An embedded <literal>*</literal> in an identifier matches any
  342. sequence of characters, but does not match the package (or
  343. inner-type) separator ".".
  344. </para>
  345. <para>
  346. An embedded <literal>..</literal> in an identifier matches any
  347. sequence of characters that starts and ends with the package (or
  348. inner-type) separator ".".
  349. </para>
  350. </sect1>
  351. <!-- ============================== -->
  352. <sect1 id="quick-advice">
  353. <title>Advice</title>
  354. <para>
  355. Each piece of advice is of the form
  356. <blockquote>
  357. <literal>[ strictfp ] <replaceable>AdviceSpec</replaceable>
  358. [ throws <replaceable>TypeList</replaceable> ] :
  359. <replaceable>Pointcut</replaceable> {
  360. <replaceable>Body</replaceable> } </literal>
  361. </blockquote>
  362. where <replaceable>AdviceSpec</replaceable> is one of
  363. </para>
  364. <variablelist>
  365. <varlistentry>
  366. <term>
  367. <literal>before( <replaceable>Formals</replaceable> ) </literal>
  368. </term>
  369. <listitem>
  370. runs before each join point
  371. </listitem>
  372. </varlistentry>
  373. <varlistentry>
  374. <term>
  375. <literal>after( <replaceable>Formals</replaceable> ) returning
  376. [ ( <replaceable>Formal</replaceable> ) ] </literal>
  377. </term>
  378. <listitem>
  379. runs after each join point that returns normally. The
  380. optional formal gives access to the returned value
  381. </listitem>
  382. </varlistentry>
  383. <varlistentry>
  384. <term>
  385. <literal>after( <replaceable>Formals</replaceable> ) throwing [
  386. ( <replaceable>Formal</replaceable> ) ] </literal>
  387. </term>
  388. <listitem>
  389. runs after each join point that throws a
  390. <literal>Throwable</literal>. If the optional formal is
  391. present, runs only after each join point that throws a
  392. <literal>Throwable</literal> of the type of
  393. <replaceable>Formal</replaceable>, and
  394. <replaceable>Formal</replaceable> gives access to the
  395. <literal>Throwable</literal> exception value
  396. </listitem>
  397. </varlistentry>
  398. <varlistentry>
  399. <term>
  400. <literal>after( <replaceable>Formals</replaceable> ) </literal>
  401. </term>
  402. <listitem>
  403. runs after each join point regardless of whether it returns
  404. normally or throws a <literal>Throwable</literal>
  405. </listitem>
  406. </varlistentry>
  407. <varlistentry>
  408. <term>
  409. <literal><replaceable>Type</replaceable>
  410. around( <replaceable>Formals</replaceable> ) </literal>
  411. </term>
  412. <listitem>
  413. runs in place of each join point. The join point can be
  414. executed by calling <literal>proceed</literal>, which takes
  415. the same number and types of arguments as the around advice.
  416. </listitem>
  417. </varlistentry>
  418. </variablelist>
  419. <para>
  420. Three special variables are available inside of advice bodies:
  421. </para>
  422. <variablelist>
  423. <varlistentry>
  424. <term>
  425. <literal>thisJoinPoint</literal>
  426. </term>
  427. <listitem>
  428. an object of type <ulink
  429. url="../api/org/aspectj/lang/JoinPoint.html"><literal>org.aspectj.lang.JoinPoint</literal></ulink>
  430. representing the join point at which the advice is executing.
  431. </listitem>
  432. </varlistentry>
  433. <varlistentry>
  434. <term>
  435. <literal>thisJoinPointStaticPart</literal>
  436. </term>
  437. <listitem>
  438. equivalent to <literal>thisJoinPoint.getStaticPart()</literal>,
  439. but may use fewer runtime resources.
  440. </listitem>
  441. </varlistentry>
  442. <varlistentry>
  443. <term>
  444. <literal>thisEnclosingJoinPointStaticPart</literal>
  445. </term>
  446. <listitem>
  447. the static part of the dynamically enclosing join point.
  448. </listitem>
  449. </varlistentry>
  450. </variablelist>
  451. </sect1>
  452. <!-- ============================== -->
  453. <sect1 id="quick-interType">
  454. <title>Inter-type member declarations</title>
  455. <para>
  456. Each inter-type member is one of
  457. </para>
  458. <variablelist>
  459. <varlistentry>
  460. <term>
  461. <literal>
  462. <replaceable>Modifiers ReturnType OnType . Id</replaceable>
  463. ( <replaceable>Formals</replaceable> )
  464. [ throws <replaceable>TypeList</replaceable> ]
  465. { <replaceable>Body</replaceable> }
  466. </literal>
  467. </term>
  468. <listitem>
  469. a method on <replaceable>OnType</replaceable>.
  470. </listitem>
  471. </varlistentry>
  472. <varlistentry>
  473. <term>
  474. <literal>
  475. abstract <replaceable>Modifiers ReturnType OnType . Id</replaceable>
  476. ( <replaceable>Formals</replaceable> )
  477. [ throws <replaceable>TypeList</replaceable> ] ;
  478. </literal>
  479. </term>
  480. <listitem>
  481. an abstract method on <replaceable>OnType</replaceable>.
  482. </listitem>
  483. </varlistentry>
  484. <varlistentry>
  485. <term>
  486. <literal>
  487. <replaceable>Modifiers OnType . </replaceable> new
  488. ( <replaceable>Formals</replaceable> )
  489. [ throws <replaceable>TypeList</replaceable> ]
  490. { <replaceable>Body</replaceable> }
  491. </literal>
  492. </term>
  493. <listitem>
  494. a constructor on <replaceable>OnType</replaceable>.
  495. </listitem>
  496. </varlistentry>
  497. <varlistentry>
  498. <term>
  499. <literal>
  500. <replaceable>Modifiers Type OnType . Id </replaceable>
  501. [ = <replaceable>Expression</replaceable> ] ;
  502. </literal>
  503. </term>
  504. <listitem>
  505. a field on <replaceable>OnType</replaceable>.
  506. </listitem>
  507. </varlistentry>
  508. </variablelist>
  509. </sect1>
  510. <!-- ============================== -->
  511. <sect1 id="quick-other">
  512. <title>Other declarations</title>
  513. <variablelist>
  514. <varlistentry>
  515. <term>
  516. <literal>
  517. declare parents :
  518. <replaceable>TypePattern</replaceable> extends
  519. <replaceable>Type</replaceable> ;
  520. </literal>
  521. </term>
  522. <listitem>
  523. the types in <replaceable>TypePattern</replaceable> extend
  524. <replaceable>Type</replaceable>.
  525. </listitem>
  526. </varlistentry>
  527. <varlistentry>
  528. <term>
  529. <literal>
  530. declare parents : <replaceable>TypePattern</replaceable>
  531. implements <replaceable>TypeList</replaceable> ;
  532. </literal>
  533. </term>
  534. <listitem>
  535. the types in <replaceable>TypePattern</replaceable>
  536. implement the types in <replaceable>TypeList</replaceable>.
  537. </listitem>
  538. </varlistentry>
  539. <varlistentry>
  540. <term>
  541. <literal>
  542. declare warning : <replaceable>Pointcut</replaceable> :
  543. <replaceable>String</replaceable> ;
  544. </literal>
  545. </term>
  546. <listitem>
  547. if any of the join points in <replaceable>Pointcut</replaceable>
  548. possibly exist in the program, the compiler emits the warning
  549. <replaceable>String</replaceable>.
  550. </listitem>
  551. </varlistentry>
  552. <varlistentry>
  553. <term>
  554. <literal>
  555. declare error : <replaceable>Pointcut</replaceable> :
  556. <replaceable>String</replaceable> ;
  557. </literal>
  558. </term>
  559. <listitem>
  560. if any of the join points in <replaceable>Pointcut</replaceable>
  561. could possibly exist in the program, the compiler emits the
  562. error <replaceable>String</replaceable>.
  563. </listitem>
  564. </varlistentry>
  565. <varlistentry>
  566. <term>
  567. <literal>
  568. declare soft :
  569. <replaceable>Type</replaceable> :
  570. <replaceable>Pointcut</replaceable> ;
  571. </literal>
  572. </term>
  573. <listitem>
  574. any <replaceable>Type</replaceable> exception
  575. that gets thrown at any join point picked out by
  576. <replaceable>Pointcut</replaceable> is wrapped in <ulink
  577. url="../api/org/aspectj/lang/SoftException.html"><literal>org.aspectj.lang.SoftException</literal></ulink>.
  578. </listitem>
  579. </varlistentry>
  580. <varlistentry>
  581. <term>
  582. <literal>
  583. declare precedence :
  584. <replaceable>TypePatternList</replaceable> ;
  585. </literal>
  586. </term>
  587. <listitem>
  588. at any join point where multiple pieces of advice
  589. apply, the advice precedence at that join point is in
  590. <replaceable>TypePatternList</replaceable> order.
  591. </listitem>
  592. </varlistentry>
  593. </variablelist>
  594. </sect1>
  595. <!-- ============================== -->
  596. <sect1 id="quick-aspectAssociations">
  597. <title>Aspects</title>
  598. <para>
  599. Each aspect is of the form
  600. <blockquote>
  601. <literal>
  602. [ privileged ] <replaceable>Modifiers</replaceable>
  603. aspect <replaceable>Id</replaceable>
  604. [ extends <replaceable>Type</replaceable> ]
  605. [ implements <replaceable>TypeList</replaceable> ]
  606. [ <replaceable>PerClause</replaceable> ]
  607. { <replaceable>Body</replaceable> }
  608. </literal>
  609. </blockquote>
  610. where <replaceable>PerClause</replaceable> defines how the aspect is
  611. instantiated and associated (<literal>issingleton()</literal> by
  612. default):
  613. </para>
  614. <informaltable frame="none">
  615. <tgroup cols="3" align="left">
  616. <thead>
  617. <row>
  618. <entry align="left">PerClause</entry>
  619. <entry align="left">Description</entry>
  620. <entry align="left">Accessor</entry>
  621. </row>
  622. </thead>
  623. <tbody valign="top">
  624. <row>
  625. <entry>
  626. [ <literal>issingleton()</literal> ]
  627. </entry>
  628. <entry>
  629. One instance of the aspect is made. This is
  630. the default.
  631. </entry>
  632. <entry>
  633. <literal>aspectOf()</literal> at all join points
  634. </entry>
  635. </row>
  636. <row>
  637. <entry>
  638. <literal>perthis(<replaceable>Pointcut</replaceable>)</literal>
  639. </entry>
  640. <entry>
  641. An instance is associated with each object that is the
  642. currently executing object at any join point in
  643. <replaceable>Pointcut</replaceable>.
  644. </entry>
  645. <entry>
  646. <literal>aspectOf(Object)</literal> at all join points
  647. </entry>
  648. </row>
  649. <row>
  650. <entry>
  651. <literal>pertarget(<replaceable>Pointcut</replaceable>)</literal>
  652. </entry>
  653. <entry>
  654. An instance is associated with each object that is the
  655. target object at any join point in
  656. <replaceable>Pointcut</replaceable>.
  657. </entry>
  658. <entry>
  659. <literal>aspectOf(Object)</literal> at all join points
  660. </entry>
  661. </row>
  662. <row>
  663. <entry>
  664. <literal>percflow(<replaceable>Pointcut</replaceable>)</literal>
  665. </entry>
  666. <entry>
  667. The aspect is defined for each entrance to the control flow of
  668. the join points defined by <replaceable>Pointcut</replaceable>. </entry>
  669. <entry>
  670. <literal>aspectOf()</literal> at join points in
  671. <literal>cflow(<replaceable>Pointcut</replaceable>)</literal>
  672. </entry>
  673. </row>
  674. <row>
  675. <entry>
  676. <literal>percflowbelow(<replaceable>Pointcut</replaceable>)</literal>
  677. </entry>
  678. <entry>
  679. The aspect is defined for each entrance to the control flow
  680. below the join points defined by <replaceable>Pointcut</replaceable>.
  681. </entry>
  682. <entry>
  683. <literal>aspectOf()</literal> at join points in
  684. <literal>cflowbelow(<replaceable>Pointcut</replaceable>)</literal>
  685. </entry>
  686. </row>
  687. </tbody>
  688. </tgroup>
  689. </informaltable>
  690. </sect1>
  691. </appendix>