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.

ajc121-tests.xml 21KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. <!-- AspectJ v1.2.1 Tests -->
  2. <ajc-test dir="bugs"
  3. pr="62073" title="false ambiguous binding error (introduced in 1.2rc2)">
  4. <compile files="DisjunctVarBinding_2.java,DisjunctVarBinding_3.java">
  5. <message kind="error" line="25" file="DisjunctVarBinding_2.java" text="Ambiguous binding of type B"/>
  6. <message kind="error" line="25" file="DisjunctVarBinding_2.java" text="Ambiguous binding of type A"/>
  7. </compile>
  8. <compile files="DisjunctVarBinding_3.java,DisjunctVarBinding_2.java">
  9. <message kind="error" line="25" file="DisjunctVarBinding_2.java" text="Ambiguous binding of type B"/>
  10. <message kind="error" line="25" file="DisjunctVarBinding_2.java" text="Ambiguous binding of type A"/>
  11. </compile>
  12. </ajc-test>
  13. <ajc-test dir="bugs/IfPerThis"
  14. pr="62458" title="An if() pointcut inside a perthis() clauses an ABORT - null pointer exception in ajc">
  15. <compile files="Testcase1.java">
  16. <message kind="error" line="15" text="if() pointcut designator cannot be used directly in a per clause"/>
  17. <message kind="error" line="23" text="if() pointcut designator cannot be used directly in a per clause"/>
  18. <message kind="error" line="25" text="if() pointcut designator cannot be used directly in a per clause"/>
  19. <message kind="error" line="27" text="if() pointcut designator cannot be used directly in a per clause"/>
  20. </compile>
  21. </ajc-test>
  22. <ajc-test dir="bugs/IfPerThis"
  23. pr="62458" title="An if() pointcut inside a perthis() clauses an ABORT - null pointer exception in ajc">
  24. <compile files="Testcase2.java"/>
  25. <run class="Testcase2"/>
  26. </ajc-test>
  27. <ajc-test dir="bugs/IfPerThis"
  28. pr="62458" title="An if() pointcut inside a perthis() clauses an ABORT - null pointer exception in ajc">
  29. <compile files="Testcase3.java">
  30. <message kind="error" line="2" text="if() pointcut designator cannot be used directly in a per clause"/>
  31. </compile>
  32. </ajc-test>
  33. <ajc-test dir="bugs/bug70619"
  34. pr="70619" title="compiler aborts with 'conflicting dominates orders' with circular declare precedences">
  35. <compile files="Precedence.java">
  36. <message kind="error" line="0" text="conflicting declare precedence"/>
  37. </compile>
  38. <compile files="Conflict.java,Order2.aj,Order1.aj">
  39. <message kind="error" line="0" text="conflicting declare precedence"/>
  40. </compile>
  41. <compile files="Conflict.java,Order1.aj,Order2.aj">
  42. <message kind="error" line="0" text="conflicting declare precedence"/>
  43. </compile>
  44. </ajc-test>
  45. <ajc-test dir="bugs"
  46. pr="53999" title="'can't bind type' message has $ for . in type name for declare soft">
  47. <compile files="Cosmetic.java">
  48. <message kind="error" line="9" text="can't bind type name 'unknown.Error'"/>
  49. </compile>
  50. </ajc-test>
  51. <ajc-test dir="bugs/intertypeOverrides"
  52. pr="69459" title="Hiding of Instance Methods by static methods">
  53. <compile files="IntertypeOverrides.java">
  54. <message kind="error" line="8" text="void Sub.m() cannot override void Super.m(); overriding method is static"/>
  55. </compile>
  56. <compile files="IntertypeOverrides2.java">
  57. <message kind="error" line="8" text="void Sub.m() cannot override void Super.m(); overridden method is static"/>
  58. </compile>
  59. <compile files="Superclass.java,Subclass.java,Aspect1.java">
  60. <message file="Aspect1.java" kind="error" line="2"
  61. text="void Subclass.staticMethod() cannot override void Superclass.staticMethod(); overridden method is static"/>
  62. </compile>
  63. <compile files="Superclass.java,Subclass.java,Aspect2.java">
  64. <message file="Aspect2.java" kind="error" line="2"
  65. text="void Subclass.nonstaticMethod() cannot override void Superclass.nonstaticMethod(); overriding method is static"/>
  66. </compile>
  67. </ajc-test>
  68. <ajc-test dir="new"
  69. title="if(false) optimisation" pr="48990">
  70. <compile files="IfFalse.aj"/>
  71. <run class="IfFalse"/>
  72. </ajc-test>
  73. <ajc-test dir="new"
  74. title="if(true) optimisation" pr="48990">
  75. <compile files="IfTrue.aj"/>
  76. <run class="IfTrue"/>
  77. </ajc-test>
  78. <ajc-test dir="bugs/abstractITDs"
  79. pr="64331" title="java.lang.NullPointerException in WeaverMessageHandler class">
  80. <compile files="A.java,C.java" aspectpath="B.jar">
  81. <message kind="error" line="1" text="must implement abstract inter-type declaration: void A.foo()"/>
  82. </compile>
  83. </ajc-test>
  84. <ajc-test dir="bugs/pr64262"
  85. title="ClassCastException at BcelRenderer.java:169" pr="64262">
  86. <compile files="PrimitiveCoercionInExactTypePatternMatching.java"/>
  87. </ajc-test>
  88. <ajc-test dir="bugs"
  89. pr="61536" title="Front-end bug, shouldn't allow patterns of the form foo.., should be foo..*">
  90. <compile files="EllipsesStar.java">
  91. <message kind="error" line="3" text="Syntax error on token"/>
  92. <message kind="error" line="4" text="Syntax error on token"/>
  93. <message kind="error" line="5" text="Syntax error on token"/>
  94. <message kind="error" line="6" text="Syntax error on token"/>
  95. <message kind="error" line="8" text="Syntax error on token"/>
  96. <message kind="error" line="10" text="Syntax error on token"/>
  97. <message kind="error" line="12" text="Syntax error on token"/>
  98. </compile>
  99. </ajc-test>
  100. <ajc-test dir="bugs"
  101. pr="67774" title="Nullpointer-Exception when defining a withincode() pointcut">
  102. <compile files="WithincodeNPE01.java">
  103. <!-- there are 3 join points that result in decw match, but 2 are on the same line! -->
  104. <message kind="warning" line="2" text="In String ctor"/>
  105. <message kind="warning" line="11" text="In String ctor"/>
  106. </compile>
  107. </ajc-test>
  108. <ajc-test dir="bugs" pr="60015"
  109. title="NPE, Incorrect XLint:unmatchedSuperTypeInCall warning">
  110. <compile files="IncorrectXlintOnInterface.java">
  111. </compile>
  112. </ajc-test>
  113. <ajc-test dir="bugs/typeVisibilityProblem" pr="67591"
  114. title="invalid warning indicating no match when a match really occurs">
  115. <compile files="Main.java">
  116. </compile>
  117. </ajc-test>
  118. <ajc-test dir="bugs" pr="71273"
  119. title="RuntimeException thrown: Could not find instruction: org.apache.bcel.generic.B2I">
  120. <compile files="NoByteToInt.java"/>
  121. <run class="NoByteToInt"/>
  122. </ajc-test>
  123. <ajc-test dir="bugs/AroundAdviceJPs" pr="71377"
  124. title="Cannot advise private method call in around advice">
  125. <compile files="JoinPointInAroundAdvice.java"/>
  126. <run class="JoinPointInAroundAdvice"/>
  127. </ajc-test>
  128. <ajc-test dir="bugs/AroundAdviceJPs" pr="71377"
  129. title="Cannot advise private field sets in around advice">
  130. <compile files="FieldJoinPointsInAroundAdvice.java"/>
  131. <run class="FieldJoinPointsInAroundAdvice"/>
  132. </ajc-test>
  133. <ajc-test dir="bugs/AroundAdviceJPs" pr="71377"
  134. title="Cannot advise private field gets in around advice">
  135. <compile files="FieldGetJoinPointsInAroundAdvice.java"/>
  136. <run class="FieldGetJoinPointsInAroundAdvice"/>
  137. </ajc-test>
  138. <!--
  139. commented out as test takes over 5 minutes to run - reinstate if you need to investigate 70201 for
  140. any reason.
  141. <ajc-test dir="bugs" pr="70201"
  142. title="Branch target offset too large for short">
  143. <compile files="VeryLongBranch.java"/>
  144. </ajc-test>
  145. -->
  146. <!-- these next two tests commented out as they take minutes to run - reinstate if you need to
  147. investigate 59208 for any reason
  148. <ajc-test dir="bugs/pr59208" pr="59208"
  149. title="Weaver fails in BCEL for large classes">
  150. <compile files="Foo.java, A.aj">
  151. <message kind="error" line="0" text="constant pool too big"></message>
  152. </compile>
  153. </ajc-test>
  154. <ajc-test dir="bugs/pr59208" pr="59208"
  155. title="Weaver fails in BCEL for large classes (binary)">
  156. <compile
  157. aspectpath="test.jar"
  158. inpath="classes">
  159. <message kind="error" line="0" text="constant pool too big"></message>
  160. </compile>
  161. </ajc-test>
  162. -->
  163. <ajc-test dir="bugs/pr53981" pr="538981"
  164. title="proceed used as method name in around advice (1)">
  165. <compile files="Proceeding1.aj"/>
  166. <run class="Proceeding1"/>
  167. </ajc-test>
  168. <ajc-test dir="bugs/pr53981" pr="538981"
  169. title="proceed used as method name in around advice (2)">
  170. <compile files="Proceeding2.aj"/>
  171. <run class="Proceeding2"/>
  172. </ajc-test>
  173. <ajc-test dir="bugs/pr53981" pr="538981"
  174. title="proceed used as method name in around advice (3)">
  175. <compile files="Proceeding3.aj"/>
  176. <run class="Proceeding3"/>
  177. </ajc-test>
  178. <ajc-test dir="bugs" pr="61572"
  179. title="ITDs on inner classes should be static context">
  180. <compile files="PR61572.aj">
  181. <message kind="error" line="19" text="Cannot make a static reference to the non-static field zzz"></message>
  182. </compile>
  183. </ajc-test>
  184. <ajc-test dir="bugs/oxford" pr="65319"
  185. title="ajc crashes when compiling the following program (binding this() and target())">
  186. <compile files="PR65319.java">
  187. <message kind="error" line="7" text="Cannot use target() to match at this"/>
  188. <message kind="error" line="7" text="Cannot use this() to match at this"/>
  189. <message kind="error" line="11" text="Cannot use target() to match at this"/>
  190. <message kind="error" line="11" text="Cannot use this() to match at this"/>
  191. <message kind="error" line="11" text="Ambiguous binding of type Test"/>
  192. <message kind="error" line="15" text="Cannot use target() to match at this"/>
  193. <message kind="error" line="15" text="Cannot use this() to match at this"/>
  194. <message kind="error" line="15" text="Ambiguous binding of type Test"/>
  195. </compile>
  196. </ajc-test>
  197. <!-- should NOT raise error, despite Oxford expectations to the contrary -->
  198. <ajc-test dir="bugs/oxford" pr="62475"
  199. title="resolution of IT field inits">
  200. <compile files="PR62475.java">
  201. </compile>
  202. </ajc-test>
  203. <ajc-test
  204. dir="bugs/invalidAbsoluteTypeName"
  205. pr="65925"
  206. title="Valid but inaccessible type names should not be flagged by XLint:invalidAbsoluteTypeName">
  207. <compile files="False_InvalidAbsoluteTypeName.java">
  208. <message kind="warning" line="17"/>
  209. </compile>
  210. <run class="False_InvalidAbsoluteTypeName"/>
  211. </ajc-test>
  212. <ajc-test dir="bugs/PR68991" pr="68991"
  213. title="intertype initialisers should match field set pointcuts">
  214. <compile files="Simple.java"/>
  215. <run class="Simple"/>
  216. </ajc-test>
  217. <ajc-test dir="bugs/PR68991" pr="68991"
  218. title="intertype initialisers should match field set pointcuts (oxford testcase)">
  219. <compile files="Oxford.java"/>
  220. <run class="Oxford"/>
  221. </ajc-test>
  222. <ajc-test dir="bugs" pr="54421"
  223. title="Compile time declarations (warning and error) do not accept string concatenation (with +)">
  224. <compile files="decwStrings.java">
  225. <message kind="warning" line="5"/>
  226. <message kind="warning" line="19" text="hello world"/>
  227. <message kind="warning" line="22" text="hello world"/>
  228. <message kind="warning" line="25" text="hello world"/>
  229. <message kind="warning" line="30" text="hello world"/>
  230. <message kind="warning" line="34" text="hello world"/>
  231. <message kind="warning" line="39" text="abcdefghijklmnopqrstuvwxyz"/>
  232. </compile>
  233. </ajc-test>
  234. <ajc-test dir="bugs" pr="54421"
  235. title="Compile time declarations (warning and error) do not accept string concatenation (with +) (2)">
  236. <compile files="decwStringsErroneous.java">
  237. <message kind="error" line="22"/>
  238. </compile>
  239. </ajc-test>
  240. <ajc-test dir="bugs/oxford" pr="61768"
  241. title="scope for inter-type methods">
  242. <compile files="PR61768.java">
  243. <message kind="error" line="37" text="No enclosing instance of type Aspect is accessible"/>
  244. </compile>
  245. </ajc-test>
  246. <ajc-test dir="bugs/doYouHaveVisiblePrivates" pr="71372"
  247. title="NoSuchMethodError calling private method from around advice in inner aspect">
  248. <compile files="PrivateCall.java"/>
  249. <run class="PrivateCall"/>
  250. </ajc-test>
  251. <ajc-test dir="bugs/doYouHaveVisiblePrivates" pr="71372"
  252. title="NoSuchMethodError calling private method from around advice in inner aspect (2)">
  253. <compile files="PrivateCall2.java,PrivateCall3.java"/>
  254. <run class="def.PrivateCall3"/>
  255. </ajc-test>
  256. <ajc-test dir="bugs/doYouHaveVisiblePrivates" pr="71372"
  257. title="NoSuchMethodError calling private method from around advice in inner aspect (3)">
  258. <compile files="PrivateCallInstance.java"/>
  259. <run class="PrivateCallInstance"/>
  260. </ajc-test>
  261. <ajc-test dir="bugs/doYouHaveVisiblePrivates" pr="71372"
  262. title="NoSuchMethodError calling private method from around advice in inner aspect (4)">
  263. <compile files="PrivateCall_Instance_Package1.java,PrivateCall_Instance_Package2.java"/>
  264. <run class="def.PrivateCall_Instance_Package2"/>
  265. </ajc-test>
  266. <ajc-test dir="bugs/privilegedNPE" pr="67579"
  267. title="NPE on privileged aspect error">
  268. <compile files="a/ITD.aj,b/B.aj"/>
  269. <run class="b.B"/>
  270. </ajc-test>
  271. <ajc-test dir="bugs/privilegedNPE" pr="67579"
  272. title="NPE on privileged aspect error (2)">
  273. <compile files="b/B.aj,a/ITD.aj"/>
  274. <run class="b.B"/>
  275. </ajc-test>
  276. <ajc-test dir="bugs/privilegedAccess" pr="67578"
  277. title="Privileged Aspect Access Problem Across Packages">
  278. <compile files="b/B.aj,a/ITD.aj"/>
  279. <run class="b.B"/>
  280. </ajc-test>
  281. <ajc-test dir="bugs/privilegedAccess" pr="67578"
  282. title="Privileged Aspect Access Problem Across Packages (2)">
  283. <compile files="b/B_notPrivileged.aj,a/ITD.aj">
  284. <message kind="error" line="7" text="The method returnNothing(Object) from the type ITD is not visible"/>
  285. </compile>
  286. </ajc-test>
  287. <ajc-test dir="bugs" pr="62642"
  288. title="proper handling of ExceptionInIntializer inside clinit in presence of after throwing advice">
  289. <compile files="pr62642.java"/>
  290. <run class="pr62642"/>
  291. </ajc-test>
  292. <ajc-test dir="bugs" pr="64069"
  293. title="ITD name clashes with private members">
  294. <compile files="PR64069.aj">
  295. <message kind="error" line="5" text="conflicts with existing member"/>
  296. <message kind="error" line="10" text="conflicts with existing member"/>
  297. <message kind="error" line="14" text="conflicts with existing member"/>
  298. </compile>
  299. </ajc-test>
  300. <ajc-test dir="bugs/pr71723" pr="71723"
  301. title="Inconsistency in scoping of protected members in ITDs">
  302. <compile files="foo/Foo.java,bar/Bar.aj">
  303. <message kind="error" line="8" text="The method i() from the type Foo is not visible"/>
  304. <message kind="error" line="9" text="The method ancientI() from the type Foo is not visible"/>
  305. <message kind="error" line="10" text="The method ancientJ() from the type AncientFoo is not visible"/>
  306. <message kind="error" line="11" text="The method clone() from the type Object is not visible"/>
  307. <message kind="error" line="12" text="The method clone() from the type Object is not static"/>
  308. </compile>
  309. </ajc-test>
  310. <ajc-test dir="design/sourceLines" pr="37020"
  311. title="wrong line for method execution join point">
  312. <compile files="TestSourceLines.java">
  313. <message kind="warning" line="5" text="static init"/>
  314. <message kind="warning" line="12" text="cons execution"/>
  315. <message kind="warning" line="12" text="pre-init"/>
  316. <message kind="warning" line="12" text="just-init"/>
  317. <message kind="warning" line="16" text="cons execution"/>
  318. <message kind="warning" line="16" text="just-init"/>
  319. <message kind="warning" line="16" text="pre-init"/>
  320. <message kind="warning" line="20" text="method execution"/>
  321. <message kind="warning" line="24" text="method execution"/>
  322. <message kind="warning" line="28" text="method execution"/>
  323. <message kind="warning" line="35" text="static init"/>
  324. <message kind="warning" line="35" text="just-init"/>
  325. <message kind="warning" line="35" text="pre-init"/>
  326. <message kind="warning" line="39" text="pre-init"/>
  327. <message kind="warning" line="39" text="just-init"/>
  328. <message kind="warning" line="39" text="static init"/>
  329. <message kind="warning" line="47" text="advice"/>
  330. </compile>
  331. </ajc-test>
  332. <ajc-test dir="bugs/interfaceITDs" pr="70794"
  333. title="The introduction on interface causes the interface implementation class error (1)">
  334. <compile files="PublicPublic.java"/>
  335. </ajc-test>
  336. <ajc-test dir="bugs/interfaceITDs" pr="70794"
  337. title="The introduction on interface causes the interface implementation class error (2)">
  338. <compile files="PackagePublic.java"/>
  339. </ajc-test>
  340. <ajc-test dir="bugs/interfaceITDs" pr="70794"
  341. title="The introduction on interface causes the interface implementation class error (3)">
  342. <compile files="PackagePackage.java">
  343. <message kind="error" line="17" text="abstract intertype method declaration 'void PackagePackage.world()' on interface PackagePackage must be declared public (compiler limitation)"/>
  344. </compile>
  345. </ajc-test>
  346. <ajc-test dir="bugs/interfaceITDs" pr="70794"
  347. title="The introduction on interface causes the interface implementation class error (4)">
  348. <compile files="PublicPackage.java">
  349. <message kind="error" line="13" text="abstract intertype method declaration 'void PublicPackage.world()' on interface PublicPackage must be declared public (compiler limitation)"/>
  350. </compile>
  351. </ajc-test>
  352. <ajc-test dir="bugs/pr72531" pr="72531"
  353. title="declare warning warns at wrong points">
  354. <compile files="de/rohith/HelloWorld.java,de/rohith/HelloWorldAspect.java,de/rohith/PrinterWorld.java">
  355. <message kind="warning" line="15" text="*[] returning method called"/>
  356. <message kind="warning" line="22" text="*[] returning method called"/>
  357. </compile>
  358. </ajc-test>
  359. <ajc-test dir="bugs/java5/arrayCloning" pr="72150"
  360. title="AJC possible bug with static nested classes">
  361. <compile files="A.java,OneFiveCode.jar" options="-showWeaveInfo"/>
  362. <!-- ARGH - Cant run it because run class is of type '49' run class="C"/-->
  363. </ajc-test>
  364. <ajc-test dir="bugs" pr="72699"
  365. title="Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class (1)">
  366. <compile files="BogusMessage.java">
  367. <message kind="error" line="2" text="The abstract pointcut tracingScope can only be defined in an abstract aspect"/>
  368. </compile>
  369. </ajc-test>
  370. <ajc-test dir="bugs" pr="72699"
  371. title="Bogus error message: The abstract method ajc$pointcut$$tracingScope$a2 in type Tracing can only be defined by an abstract class (2)">
  372. <compile files="BogusMessage2.java">
  373. <message kind="error" line="2" text="The abstract pointcut tracingScope can only be defined in an aspect"/>
  374. </compile>
  375. </ajc-test>
  376. <ajc-test dir="bugs/pr70404" pr="70404"
  377. title="passing null to array arguments confuzes static join point signature. (1)">
  378. <compile files="Main.java,MainAspect.java"/>
  379. <run class="dk.infimum.aspectjtest.Main"/>
  380. </ajc-test>
  381. <ajc-test dir="bugs/pr70404" pr="70404"
  382. title="passing null to array arguments confuzes static join point signature. (2)">
  383. <compile files="Main2.java,MainAspect.java"/>
  384. <run class="dk.infimum.aspectjtest.Main2"/>
  385. </ajc-test>
  386. <ajc-test dir="bugs" pr="72528"
  387. title="around advice throws java.lang.VerifyError at runtime">
  388. <compile files="ArrayCloning.java"/>
  389. <run class="ArrayCloning"/>
  390. </ajc-test>
  391. <ajc-test dir="bugs" pr="72157"
  392. title="declare soft can cause programs with invalid exception behaviour to be generated">
  393. <compile files="PR72157.java">
  394. <message kind="error" line="13" text="Unhandled"/>
  395. </compile>
  396. </ajc-test>
  397. <ajc-test
  398. dir="bugs"
  399. pr="75129"
  400. title="NPE on thisJoinPoint mistake">
  401. <compile files="TjpMistake.java">
  402. <message kind="error" line="22"/>
  403. </compile>
  404. </ajc-test>
  405. <ajc-test dir="cflow" pr="76030" title="Optimization of cflow - counters (1)">
  406. <compile files="CounterTest01.java"/>
  407. <run class="CounterTest01"/>
  408. </ajc-test>
  409. <ajc-test dir="cflow" pr="76030" title="Optimization of cflow - shared counters (2)">
  410. <compile files="CounterTest02.java"/>
  411. <run class="CounterTest02"/>
  412. </ajc-test>
  413. <ajc-test dir="cflow" pr="76030" title="Optimization of cflow - shared stacks (3)">
  414. <compile files="CounterTest03.java"/>
  415. <run class="CounterTest03"/>
  416. </ajc-test>
  417. <ajc-test dir="cflow" pr="76030" title="Optimization of cflow - counters (4)">
  418. <compile files="CounterTest04.java"/>
  419. <run class="CounterTest04"/>
  420. </ajc-test>
  421. <ajc-test dir="cflow" pr="76030" title="Optimization of cflow - counters with abstract pointcuts (5)">
  422. <compile files="CounterTest05.java"/>
  423. <run class="CounterTest05"/>
  424. </ajc-test>
  425. <ajc-test dir="bugs/pr76096" pr="76096" title="Anonymous classes unaware of introductions into abstract classes">
  426. <compile files="ConcreteClassA.java"/>
  427. <run class="ConcreteClassA"/>
  428. </ajc-test>