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.

IncrementalCompilationTests.java 43KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837
  1. /********************************************************************
  2. * Copyright (c) 2010 Contributors. All rights reserved.
  3. * This program and the accompanying materials are made available
  4. * under the terms of the Eclipse Public License v1.0
  5. * which accompanies this distribution and is available at
  6. * http://eclipse.org/legal/epl-v10.html
  7. *
  8. * Contributors:
  9. * Andy Clement (SpringSource) initial implementation
  10. *******************************************************************/
  11. package org.aspectj.systemtest.incremental.tools;
  12. import java.io.File;
  13. import java.util.Set;
  14. import org.aspectj.ajde.core.AjCompiler;
  15. import org.aspectj.ajde.core.internal.AjdeCoreBuildManager;
  16. import org.aspectj.ajdt.internal.core.builder.AjBuildManager;
  17. import org.aspectj.asm.IProgramElement;
  18. import org.aspectj.asm.internal.AspectJElementHierarchy;
  19. import org.aspectj.weaver.AnnotationAJ;
  20. import org.aspectj.weaver.ReferenceType;
  21. import org.aspectj.weaver.ReferenceTypeDelegate;
  22. import org.aspectj.weaver.ResolvedMember;
  23. import org.aspectj.weaver.ResolvedType;
  24. import org.aspectj.weaver.UnresolvedType;
  25. import org.aspectj.weaver.World;
  26. import org.aspectj.weaver.World.TypeMap;
  27. /**
  28. * Incremental compilation tests. MultiProjectIncrementalTests was getting unwieldy - started this new test class for 1.6.10.
  29. *
  30. * @author Andy Clement
  31. * @since 1.6.10
  32. */
  33. public class IncrementalCompilationTests extends AbstractMultiProjectIncrementalAjdeInteractionTestbed {
  34. public void testAdditionalDependencies328649_1() throws Exception {
  35. String p = "pr328649_1";
  36. initialiseProject(p);
  37. build(p);
  38. checkWasFullBuild();
  39. checkCompileWeaveCount(p, 2, 2);
  40. assertEquals(0, getErrorMessages(p).size());
  41. alter(p, "inc1");
  42. build(p);
  43. checkWasntFullBuild();
  44. checkCompileWeaveCount(p, 1, 1);
  45. assertEquals(0, getErrorMessages(p).size());
  46. alter(p, "inc2");
  47. AjCompiler compiler = getCompilerForProjectWithName(p);
  48. String s = getFile(p, "src/B.java");
  49. assertNotNull(s);
  50. // add in a dependency where there really isn't one...
  51. boolean b = compiler.addDependencies(new File(s), new String[] { "A" });
  52. assertTrue(b);
  53. build(p);
  54. checkWasntFullBuild();
  55. // now A rebuilds, then A and B rebuild due to that extra dependency
  56. checkCompileWeaveCount(p, 3, 3);
  57. assertEquals(0, getErrorMessages(p).size());
  58. alter(p, "inc2");
  59. compiler = getCompilerForProjectWithName(p);
  60. s = getFile(p, "src/B.java");
  61. assertNotNull(s);
  62. }
  63. /**
  64. * Build a pair of files, then change the throws clause in the first one (add a throws clause where there wasnt one). The second
  65. * file should now have a 'unhandled exception' error on it.
  66. */
  67. public void testModifiedThrowsClauseShouldTriggerError_318884() throws Exception {
  68. String p = "pr318884_1";
  69. initialiseProject(p);
  70. build(p);
  71. checkWasFullBuild();
  72. checkCompileWeaveCount(p, 2, 2);
  73. alter(p, "inc1");
  74. build(p);
  75. checkWasntFullBuild();
  76. assertEquals(1, getErrorMessages(p).size());
  77. assertContains("B.java:4:0::0 Unhandled exception type IOException", getErrorMessages(p).get(0));
  78. }
  79. public void testDeclareFieldMinus() throws Exception {
  80. String p = "annoRemoval";
  81. initialiseProject(p);
  82. build(p);
  83. checkWasFullBuild();
  84. AspectJElementHierarchy model = (AspectJElementHierarchy) getModelFor(p).getHierarchy();
  85. IProgramElement ipe = null;
  86. ipe = model.findElementForHandleOrCreate("=annoRemoval<a{Code.java'Remover`declare \\@field", false);
  87. System.out.println(ipe);
  88. assertTrue(ipe.isAnnotationRemover());
  89. String[] annos = ipe.getRemovedAnnotationTypes();
  90. assertEquals(1, annos.length);
  91. assertEquals("a.Anno", annos[0]);
  92. assertNull(ipe.getAnnotationType());
  93. ipe = model.findElementForHandleOrCreate("=annoRemoval<a{Code.java'Remover`declare \\@field!2", false);
  94. System.out.println(ipe);
  95. assertFalse(ipe.isAnnotationRemover());
  96. assertEquals("a.Anno", ipe.getAnnotationType());
  97. assertNull(ipe.getRemovedAnnotationTypes());
  98. }
  99. /**
  100. * Build a pair of files, then change the throws clause in the first one (change the type of the thrown exception). The second
  101. * file should now have a 'unhandled exception' error on it.
  102. */
  103. public void testModifiedThrowsClauseShouldTriggerError_318884_2() throws Exception {
  104. String p = "pr318884_2";
  105. initialiseProject(p);
  106. build(p);
  107. checkWasFullBuild();
  108. checkCompileWeaveCount(p, 2, 2);
  109. alter(p, "inc1");
  110. build(p);
  111. checkWasntFullBuild();
  112. assertEquals(1, getErrorMessages(p).size());
  113. assertContains("B.java:4:0::0 Unhandled exception type Exception", getErrorMessages(p).get(0));
  114. }
  115. // changing method return type parameterization
  116. public void testModifiedMethodReturnTypeGenericTypeParameterShouldTriggerError_318884_3() throws Exception {
  117. String p = "pr318884_3";
  118. initialiseProject(p);
  119. build(p);
  120. checkWasFullBuild();
  121. checkCompileWeaveCount(p, 2, 2);
  122. alter(p, "inc1");
  123. build(p);
  124. checkWasntFullBuild();
  125. assertEquals(1, getErrorMessages(p).size());
  126. assertContains("The return type is incompatible with B.foo()", getErrorMessages(p).get(0));
  127. }
  128. // changing method parameter type parameterization
  129. public void testModifiedMethodParameterGenericTypeParameterShouldTriggerError_318884_4() throws Exception {
  130. String p = "pr318884_4";
  131. initialiseProject(p);
  132. build(p);
  133. checkWasFullBuild();
  134. checkCompileWeaveCount(p, 2, 2);
  135. alter(p, "inc1");
  136. build(p);
  137. checkWasntFullBuild();
  138. assertEquals(1, getErrorMessages(p).size());
  139. assertContains(
  140. "Name clash: The method foo(List<String>) of type A has the same erasure as foo(List<Integer>) of type B but does not override it",
  141. getErrorMessages(p).get(0));
  142. }
  143. // changing constructor parameter type parameterization
  144. public void testModifiedConstructorParameterGenericTypeParameterShouldTriggerError_318884_5() throws Exception {
  145. String p = "pr318884_5";
  146. initialiseProject(p);
  147. build(p);
  148. checkWasFullBuild();
  149. checkCompileWeaveCount(p, 2, 2);
  150. alter(p, "inc1");
  151. build(p);
  152. checkWasntFullBuild();
  153. assertEquals(1, getErrorMessages(p).size());
  154. assertContains("The constructor B(List<String>) is undefined", getErrorMessages(p).get(0));
  155. }
  156. // changing field type parameterization
  157. public void testModifiedFieldTypeGenericTypeParameterShouldTriggerError_318884_6() throws Exception {
  158. String p = "pr318884_6";
  159. initialiseProject(p);
  160. build(p);
  161. checkWasFullBuild();
  162. checkCompileWeaveCount(p, 2, 2);
  163. alter(p, "inc1");
  164. build(p);
  165. checkWasntFullBuild();
  166. assertEquals(1, getErrorMessages(p).size());
  167. assertContains("Type mismatch: cannot convert from element type Integer to String", getErrorMessages(p).get(0));
  168. }
  169. // removing static inner class
  170. public void testInnerClassChanges_318884_7() throws Exception {
  171. String p = "pr318884_7";
  172. initialiseProject(p);
  173. build(p);
  174. checkWasFullBuild();
  175. checkCompileWeaveCount(p, 2, 3);
  176. alter(p, "inc1");
  177. build(p);
  178. checkWasntFullBuild();
  179. assertEquals(1, getErrorMessages(p).size());
  180. assertContains("B.C cannot be resolved to a type", getErrorMessages(p).get(0));
  181. }
  182. // removing constructor from a static inner class
  183. public void testInnerClassChanges_318884_9() throws Exception {
  184. String p = "pr318884_9";
  185. initialiseProject(p);
  186. build(p);
  187. checkWasFullBuild();
  188. checkCompileWeaveCount(p, 2, 3);
  189. alter(p, "inc1");
  190. build(p);
  191. checkWasntFullBuild();
  192. assertEquals(1, getErrorMessages(p).size());
  193. assertContains("The constructor B.C(String) is undefined", getErrorMessages(p).get(0));
  194. }
  195. // removing class
  196. public void testInnerClassChanges_318884_10() throws Exception {
  197. String p = "pr318884_10";
  198. initialiseProject(p);
  199. build(p);
  200. checkWasFullBuild();
  201. checkCompileWeaveCount(p, 2, 2);
  202. alter(p, "inc1");
  203. build(p);
  204. checkWasntFullBuild();
  205. assertEquals(2, getErrorMessages(p).size());
  206. assertContains("B cannot be resolved to a type", getErrorMessages(p).get(0));
  207. }
  208. // deleting unaffected model entries
  209. public void testDeletion_278496() throws Exception {
  210. String p = "PR278496_1";
  211. initialiseProject(p);
  212. configureNonStandardCompileOptions(p, "-Xset:minimalModel=true");
  213. build(p);
  214. checkWasFullBuild();
  215. // Here is the model without deletion. The node for 'Code.java' can safely be deleted as it contains
  216. // no types that are the target of relationships.
  217. // PR278496_1 [build configuration file] hid:=PR278496_1
  218. // a.b.c [package] hid:=PR278496_1<a.b.c
  219. // Azpect.java [java source file] 1 hid:=PR278496_1<a.b.c{Azpect.java
  220. // a.b.c [package declaration] 1 hid:=PR278496_1<a.b.c{Azpect.java%a.b.c
  221. // [import reference] hid:=PR278496_1<a.b.c{Azpect.java#
  222. // Azpect [aspect] 3 hid:=PR278496_1<a.b.c{Azpect.java}Azpect
  223. // before(): <anonymous pointcut> [advice] 4 hid:=PR278496_1<a.b.c{Azpect.java}Azpect&before
  224. // Code.java [java source file] 1 hid:=PR278496_1<a.b.c{Code.java
  225. // a.b.c [package declaration] 1 hid:=PR278496_1<a.b.c{Code.java%a.b.c
  226. // [import reference] hid:=PR278496_1<a.b.c{Code.java#
  227. // java.util.ArrayList [import reference] 3 hid:=PR278496_1<a.b.c{Code.java#java.util.ArrayList
  228. // java.util.List [import reference] 2 hid:=PR278496_1<a.b.c{Code.java#java.util.List
  229. // Code [class] 5 hid:=PR278496_1<a.b.c{Code.java[Code
  230. // m() [method] 6 hid:=PR278496_1<a.b.c{Code.java[Code~m
  231. // Code2.java [java source file] 1 hid:=PR278496_1<a.b.c{Code2.java
  232. // a.b.c [package declaration] 1 hid:=PR278496_1<a.b.c{Code2.java%a.b.c
  233. // [import reference] hid:=PR278496_1<a.b.c{Code2.java#
  234. // java.util.ArrayList [import reference] 3 hid:=PR278496_1<a.b.c{Code2.java#java.util.ArrayList
  235. // java.util.List [import reference] 2 hid:=PR278496_1<a.b.c{Code2.java#java.util.List
  236. // Code2 [class] 5 hid:=PR278496_1<a.b.c{Code2.java[Code2
  237. // m() [method] 6 hid:=PR278496_1<a.b.c{Code2.java[Code2~m
  238. // Hid:1:(targets=1) =PR278496_1<a.b.c{Azpect.java}Azpect&before (advises) =PR278496_1<a.b.c{Code2.java[Code2
  239. // Hid:2:(targets=1) =PR278496_1<a.b.c{Code2.java[Code2 (advised by) =PR278496_1<a.b.c{Azpect.java}Azpect&before
  240. // deletion turned on:
  241. // PR278496_1 [build configuration file] hid:=PR278496_1
  242. // a.b.c [package] hid:<a.b.c
  243. // Azpect.java [java source file] 1 hid:<a.b.c{Azpect.java
  244. // a.b.c [package declaration] 1 hid:<a.b.c{Azpect.java%a.b.c
  245. // [import reference] hid:<a.b.c{Azpect.java#
  246. // Azpect [aspect] 3 hid:<a.b.c{Azpect.java}Azpect
  247. // before(): <anonymous pointcut> [advice] 4 hid:<a.b.c{Azpect.java}Azpect&before
  248. // Code2.java [java source file] 1 hid:<a.b.c{Code2.java
  249. // a.b.c [package declaration] 1 hid:<a.b.c{Code2.java%a.b.c
  250. // [import reference] hid:<a.b.c{Code2.java#
  251. // java.util.ArrayList [import reference] 3 hid:<a.b.c{Code2.java#java.util.ArrayList
  252. // java.util.List [import reference] 2 hid:<a.b.c{Code2.java#java.util.List
  253. // Code2 [class] 5 hid:<a.b.c{Code2.java[Code2
  254. // m() [method] 6 hid:<a.b.c{Code2.java[Code2~m
  255. // Hid:1:(targets=1) <a.b.c{Azpect.java}Azpect&before (advises) <a.b.c{Code2.java[Code2
  256. // Hid:2:(targets=1) <a.b.c{Code2.java[Code2 (advised by) <a.b.c{Azpect.java}Azpect&before
  257. AspectJElementHierarchy model = (AspectJElementHierarchy) getModelFor(p).getHierarchy();
  258. // Node for "Code.java" should not be there:
  259. IProgramElement ipe = model.findElementForHandleOrCreate("=PR278496_1<a.b.c{Code.java", false);
  260. assertNull(ipe);
  261. }
  262. // inner classes
  263. public void testDeletion_278496_9() throws Exception {
  264. String p = "PR278496_9";
  265. initialiseProject(p);
  266. configureNonStandardCompileOptions(p, "-Xset:minimalModel=true");
  267. build(p);
  268. checkWasFullBuild();
  269. printModel(p);
  270. AspectJElementHierarchy model = (AspectJElementHierarchy) getModelFor(p).getHierarchy();
  271. // Node for "Code.java" should not be there:
  272. IProgramElement ipe = model.findElementForHandleOrCreate("=PR278496_9<a.b.c{Code.java", false);
  273. assertNull(ipe);
  274. }
  275. // deleting unaffected model entries
  276. public void testDeletion_278496_2() throws Exception {
  277. String p = "PR278496_2";
  278. initialiseProject(p);
  279. configureNonStandardCompileOptions(p, "-Xset:minimalModel=true");
  280. build(p);
  281. checkWasFullBuild();
  282. // printModel(p);
  283. // Here is the model without deletion.
  284. // PR278496_2 [build configuration file] hid:=PR278496_2
  285. // [package] hid:=PR278496_2<
  286. // Azpect.java [java source file] 1 hid:=PR278496_2<{Azpect.java
  287. // [import reference] hid:=PR278496_2<{Azpect.java#
  288. // Azpect [aspect] 1 hid:=PR278496_2<{Azpect.java}Azpect
  289. // Code.m() [inter-type method] 2 hid:=PR278496_2<{Azpect.java}Azpect)Code.m
  290. // Code.java [java source file] 1 hid:=PR278496_2<{Code.java
  291. // [import reference] hid:=PR278496_2<{Code.java#
  292. // Code [class] 1 hid:=PR278496_2<{Code.java[Code
  293. // Hid:1:(targets=1) =PR278496_2<{Azpect.java}Azpect)Code.m (declared on) =PR278496_2<{Code.java[Code
  294. // Hid:2:(targets=1) =PR278496_2<{Code.java[Code (aspect declarations) =PR278496_2<{Azpect.java}Azpect)Code.m
  295. AspectJElementHierarchy model = (AspectJElementHierarchy) getModelFor(p).getHierarchy();
  296. // Node for "Code.java" should be there since it is the target of a relationship
  297. IProgramElement ipe = model.findElementForHandleOrCreate("=PR278496_2<{Code.java", false);
  298. assertNotNull(ipe);
  299. }
  300. public void testWorldDemotion_278496_5() throws Exception {
  301. String p = "PR278496_5";
  302. initialiseProject(p);
  303. configureNonStandardCompileOptions(p, "-Xset:typeDemotion=true");
  304. build(p);
  305. checkWasFullBuild();
  306. alter(p, "inc1");
  307. build(p);
  308. checkWasntFullBuild();
  309. AjdeCoreBuildManager buildManager = getCompilerForProjectWithName(p).getBuildManager();
  310. AjBuildManager ajBuildManager = buildManager.getAjBuildManager();
  311. World w = ajBuildManager.getWorld();
  312. ReferenceTypeDelegate delegate = null;
  313. delegate = w.resolveToReferenceType("com.Foo").getDelegate();
  314. ResolvedMember[] fields = delegate.getDeclaredFields();
  315. assertEquals("int com.Foo.i", fields[0].toString());
  316. assertEquals("java.lang.String com.Foo.s", fields[1].toString());
  317. assertEquals("java.util.List com.Foo.ls", fields[2].toString());
  318. assertEquals("[Anno[Lcom/Anno; rVis]]", stringify(fields[2].getAnnotations()));
  319. assertNotNull(fields[2].getAnnotationOfType(UnresolvedType.forSignature("Lcom/Anno;")));
  320. assertNull(fields[2].getAnnotationOfType(UnresolvedType.forSignature("Lcom/Anno2;")));
  321. assertTrue(fields[2].hasAnnotation(UnresolvedType.forSignature("Lcom/Anno;")));
  322. assertFalse(fields[2].hasAnnotation(UnresolvedType.forSignature("Ljava/lang/String;")));
  323. assertEquals(0, fields[1].getAnnotations().length);
  324. assertEquals("[com.Anno2 com.Anno]", stringify(fields[3].getAnnotationTypes()));
  325. assertEquals("[]", stringify(fields[1].getAnnotationTypes()));
  326. assertEquals("[Anno[Lcom/Anno2; rVis a=(int)42] Anno[Lcom/Anno; rVis]]", stringify(fields[3].getAnnotations()));
  327. assertEquals("[]", stringify(fields[1].getAnnotations()));
  328. assertEquals("I", fields[0].getSignature());
  329. assertEquals("Ljava/lang/String;", fields[1].getSignature());
  330. assertEquals("Ljava/util/List;", fields[2].getSignature());
  331. assertEquals("Pjava/util/List<Ljava/lang/String;>;", fields[2].getGenericReturnType().getSignature());
  332. assertEquals("Ljava/util/List;", fields[3].getSignature());
  333. assertEquals("Pjava/util/List<Ljava/lang/Integer;>;", fields[3].getGenericReturnType().getSignature());
  334. }
  335. public void testWorldDemotion_278496_6() throws Exception {
  336. String p = "PR278496_6";
  337. initialiseProject(p);
  338. configureNonStandardCompileOptions(p, "-Xset:typeDemotion=true");
  339. build(p);
  340. checkWasFullBuild();
  341. alter(p, "inc1");
  342. build(p);
  343. checkWasntFullBuild();
  344. AjdeCoreBuildManager buildManager = getCompilerForProjectWithName(p).getBuildManager();
  345. AjBuildManager ajBuildManager = buildManager.getAjBuildManager();
  346. World w = ajBuildManager.getWorld();
  347. ReferenceTypeDelegate delegate = null;
  348. delegate = w.resolveToReferenceType("com.Meths").getDelegate();
  349. // assertTrue(delegate instanceof CompactTypeStructureDelegate);
  350. ResolvedMember[] methods = delegate.getDeclaredMethods();
  351. assertEquals("void com.Meths.<init>()", methods[0].toString());
  352. assertEquals("void com.Meths.m()", methods[1].toString());
  353. assertEquals("java.util.List com.Meths.n(int, long, java.util.List)", methods[2].toString());
  354. System.out.println(stringify(methods[0].getAnnotations()));
  355. System.out.println(stringify(methods[1].getAnnotations()));
  356. System.out.println(stringify(methods[2].getAnnotations()));
  357. assertEquals("[Anno[Lcom/Anno; rVis]]", stringify(methods[1].getAnnotations()));
  358. // assertNotNull(fields[2].getAnnotationOfType(UnresolvedType.forSignature("Lcom/Anno;")));
  359. // assertNull(fields[2].getAnnotationOfType(UnresolvedType.forSignature("Lcom/Anno2;")));
  360. // assertTrue(fields[2].hasAnnotation(UnresolvedType.forSignature("Lcom/Anno;")));
  361. // assertFalse(fields[2].hasAnnotation(UnresolvedType.forSignature("Ljava/lang/String;")));
  362. // assertEquals(0,fields[1].getAnnotations().length);
  363. // assertEquals("[com.Anno2 com.Anno]",stringify(fields[3].getAnnotationTypes()));
  364. // assertEquals("[]",stringify(fields[1].getAnnotationTypes()));
  365. // assertEquals("[Anno[Lcom/Anno2; rVis a=(int)42] Anno[Lcom/Anno; rVis]]",stringify(fields[3].getAnnotations()));
  366. // assertEquals("[]",stringify(fields[1].getAnnotations()));
  367. //
  368. // assertEquals("I",fields[0].getSignature());
  369. // assertEquals("Ljava/lang/String;",fields[1].getSignature());
  370. // assertEquals("Ljava/util/List;",fields[2].getSignature());
  371. // assertEquals("Pjava/util/List<Ljava/lang/String;>;",fields[2].getGenericReturnType().getSignature());
  372. // assertEquals("Ljava/util/List;",fields[3].getSignature());
  373. // assertEquals("Pjava/util/List<Ljava/lang/Integer;>;",fields[3].getGenericReturnType().getSignature());
  374. }
  375. // public void testWorldDemotion_278496_7() throws Exception {
  376. // boolean demotion = true;
  377. // AjdeInteractionTestbed.VERBOSE=true;
  378. // String p = "PR278496_7";
  379. // TypeMap.useExpendableMap=false;
  380. // initialiseProject(p);
  381. // if (demotion) {
  382. // configureNonStandardCompileOptions(p, "-Xset:typeDemotion=true,typeDemotionDebug=true");
  383. // }
  384. // build(p);
  385. // checkWasFullBuild();
  386. // assertNoErrors(p);
  387. // alter(p,"inc1");
  388. // build(p);
  389. // checkWasntFullBuild();
  390. // assertNoErrors(p);
  391. //
  392. // AjdeCoreBuildManager buildManager = getCompilerForProjectWithName(p).getBuildManager();
  393. // AjBuildManager ajBuildManager = buildManager.getAjBuildManager();
  394. // World w = ajBuildManager.getWorld();
  395. // }
  396. @Override
  397. protected void tearDown() throws Exception {
  398. super.tearDown();
  399. TypeMap.useExpendableMap = true;
  400. }
  401. public void testWorldDemotion_278496_4() throws Exception {
  402. String p = "PR278496_4";
  403. // Setting this ensures types are forced out when demoted - we are not at the mercy of weak reference GC
  404. TypeMap.useExpendableMap = false;
  405. initialiseProject(p);
  406. configureNonStandardCompileOptions(p, "-Xset:typeDemotion=true,typeDemotionDebug=true");
  407. build(p);
  408. checkWasFullBuild();
  409. alter(p, "inc1");
  410. build(p);
  411. checkWasntFullBuild();
  412. AjdeCoreBuildManager buildManager = getCompilerForProjectWithName(p).getBuildManager();
  413. AjBuildManager ajBuildManager = buildManager.getAjBuildManager();
  414. World w = ajBuildManager.getWorld();
  415. // Confirm demoted:
  416. assertNotInTypeMap(w, "Lcom/foo/Bar;");
  417. ReferenceType rt = null;
  418. ReferenceTypeDelegate delegate = null;
  419. rt = w.resolveToReferenceType("com.foo.Bar");
  420. delegate = rt.getDelegate();
  421. // Should have been demoted to a CTSD
  422. assertEquals(0, delegate.getAnnotations().length);
  423. assertEquals(0, delegate.getAnnotationTypes().length);
  424. assertEquals(0, delegate.getDeclaredInterfaces().length);
  425. assertEquals("java.lang.Object", delegate.getSuperclass().toString());
  426. assertNull(delegate.getRetentionPolicy());
  427. assertFalse(delegate.isInterface());
  428. assertTrue(delegate.isClass());
  429. assertFalse(delegate.isEnum());
  430. // assertFalse(rtd.isWeavable());
  431. // try {
  432. // assertTrue(delegate.hasBeenWoven());
  433. // fail("expected exception");
  434. // } catch (IllegalStateException ise) {
  435. // // success
  436. // }
  437. // Confirm demoted:
  438. assertNull(w.getTypeMap().get("Lcom/foo/Color;"));
  439. rt = w.resolveToReferenceType("com.foo.Color");
  440. delegate = rt.getDelegate();
  441. assertFalse(delegate.isInterface());
  442. assertTrue(delegate.isEnum());
  443. // Aspects are never demoted and so never have a per clause, declares or type mungers
  444. assertNull(delegate.getPerClause());
  445. assertEquals(0, delegate.getDeclares().size());
  446. assertEquals(0, delegate.getTypeMungers().size());
  447. assertFalse(delegate.isAspect());
  448. assertEquals(0, delegate.getPrivilegedAccesses().size());
  449. assertEquals(0, delegate.getDeclaredPointcuts().length);
  450. assertFalse(delegate.isAnnotationStyleAspect());
  451. assertFalse(delegate.isAnnotationWithRuntimeRetention());
  452. // Confirm demoted:
  453. assertNull(w.getTypeMap().get("Lcom/foo/Extender;"));
  454. rt = w.resolveToReferenceType("com.foo.Extender");
  455. delegate = rt.getDelegate();
  456. assertEquals("[com.foo.Marker]", stringify(delegate.getDeclaredInterfaces()));
  457. assertEquals("com.foo.Super", delegate.getSuperclass().toString());
  458. // this has one fixed annotation that is a well known one
  459. // Confirm demoted:
  460. ResolvedType annoType = w.getTypeMap().get("Lcom/foo/Anno;");
  461. assertNull(annoType);
  462. rt = w.resolveToReferenceType("com.foo.Anno");
  463. delegate = rt.getDelegate();
  464. assertEquals("[Anno[Ljava/lang/annotation/Retention; rVis value=E(Ljava/lang/annotation/RetentionPolicy; RUNTIME)]]",
  465. stringify(delegate.getAnnotations()));
  466. assertEquals("[java.lang.annotation.Retention]", stringify(delegate.getAnnotationTypes()));
  467. assertTrue(delegate.isAnnotationWithRuntimeRetention());
  468. assertEquals("RUNTIME", delegate.getRetentionPolicy());
  469. // this has a bunch of well known ones
  470. rt = w.resolveToReferenceType("com.foo.Anno2");
  471. delegate = rt.getDelegate();
  472. assertEquals(
  473. "[Anno[Ljava/lang/Deprecated; rVis] Anno[Ljava/lang/annotation/Inherited; rVis] Anno[Ljava/lang/annotation/Retention; rVis value=E(Ljava/lang/annotation/RetentionPolicy; CLASS)]]",
  474. stringify(delegate.getAnnotations()));
  475. assertEquals("[java.lang.Deprecated java.lang.annotation.Inherited java.lang.annotation.Retention]",
  476. stringify(delegate.getAnnotationTypes()));
  477. assertFalse(delegate.isAnnotationWithRuntimeRetention());
  478. assertEquals("CLASS", delegate.getRetentionPolicy());
  479. assertTrue(delegate.hasAnnotation(UnresolvedType.forSignature("Ljava/lang/annotation/Inherited;")));
  480. assertTrue(delegate.hasAnnotation(UnresolvedType.forSignature("Ljava/lang/annotation/Retention;")));
  481. assertFalse(delegate.hasAnnotation(UnresolvedType.forSignature("Lcom/foo/Anno;")));
  482. // this has a well known one and a non-well known one
  483. rt = w.resolveToReferenceType("com.foo.Anno3");
  484. delegate = rt.getDelegate();
  485. System.out.println(stringify(delegate.getAnnotations()));
  486. assertEquals(
  487. "[Anno[Lcom/foo/Anno; rVis] Anno[Ljava/lang/annotation/Retention; rVis value=E(Ljava/lang/annotation/RetentionPolicy; SOURCE)]]",
  488. stringify(delegate.getAnnotations()));
  489. assertEquals("[com.foo.Anno java.lang.annotation.Retention]", stringify(delegate.getAnnotationTypes()));
  490. assertFalse(delegate.isAnnotationWithRuntimeRetention());
  491. assertEquals("SOURCE", delegate.getRetentionPolicy());
  492. // this has two non-well known ones
  493. rt = w.resolveToReferenceType("com.foo.Anno4");
  494. delegate = rt.getDelegate();
  495. assertEquals("[Anno[Lcom/foo/Anno2; rInvis] Anno[Lcom/foo/Anno; rVis]]", stringify(delegate.getAnnotations()));
  496. assertEquals("[com.foo.Anno2 com.foo.Anno]", stringify(delegate.getAnnotationTypes()));
  497. assertFalse(delegate.isAnnotationWithRuntimeRetention());
  498. assertNull(delegate.getRetentionPolicy());
  499. assertTrue(delegate.hasAnnotation(UnresolvedType.forSignature("Lcom/foo/Anno;")));
  500. rt = w.resolveToReferenceType("com.foo.Colored");
  501. delegate = rt.getDelegate();
  502. AnnotationAJ annotation = delegate.getAnnotations()[0]; // should be ColorAnno(c=Color.G)
  503. assertTrue(annotation.hasNamedValue("c"));
  504. assertFalse(annotation.hasNamedValue("value"));
  505. assertTrue(annotation.hasNameValuePair("c", "Lcom/foo/Color;G"));
  506. assertFalse(annotation.hasNameValuePair("c", "Lcom/foo/Color;B"));
  507. assertFalse(annotation.hasNameValuePair("d", "xxx"));
  508. assertNull(annotation.getStringFormOfValue("d"));
  509. assertEquals("Lcom/foo/Color;G", annotation.getStringFormOfValue("c"));
  510. assertEquals(0, annotation.getTargets().size());
  511. assertTrue(delegate.isCacheable());
  512. assertFalse(delegate.isExposedToWeaver());
  513. // assertEquals(w.resolve(UnresolvedType.forSignature("Lcom/foo/Colored;")),delegate.getResolvedTypeX());
  514. assertEquals("com/foo/Colored.java", delegate.getSourcefilename());
  515. // Anno5 has an @Target annotation
  516. rt = w.resolveToReferenceType("com.foo.Anno5");
  517. delegate = rt.getDelegate();
  518. annotation = delegate.getAnnotations()[0]; // should be @Target(TYPE,FIELD)
  519. Set<String> ss = annotation.getTargets();
  520. assertEquals(2, ss.size());
  521. assertTrue(ss.contains("FIELD"));
  522. assertTrue(ss.contains("TYPE"));
  523. // AnnotationTargetKind[] kinds = delegate.getAnnotationTargetKinds();
  524. // assertEquals("FIELD",kinds[0].getName());
  525. // assertEquals("TYPE",kinds[1].getName());
  526. rt = w.resolveToReferenceType("com.foo.Inners$Inner");
  527. delegate = rt.getDelegate();
  528. assertTrue(delegate.isNested());
  529. assertEquals("com.foo.Inners", delegate.getOuterClass().getName());
  530. rt = w.resolveToReferenceType("com.foo.Inners$1");
  531. delegate = rt.getDelegate();
  532. assertTrue(delegate.isAnonymous());
  533. assertTrue(delegate.isNested());
  534. // delegate = w.resolveToReferenceType("com.foo.Anno6").getDelegate();
  535. // kinds = delegate.getAnnotationTargetKinds();
  536. // assertEquals(6,kinds.length);
  537. // String s = stringify(kinds);
  538. // assertTrue(s.contains("ANNOTATION_TYPE"));
  539. // assertTrue(s.contains("LOCAL_VARIABLE"));
  540. // assertTrue(s.contains("METHOD"));
  541. // assertTrue(s.contains("PARAMETER"));
  542. // assertTrue(s.contains("PACKAGE"));
  543. // assertTrue(s.contains("CONSTRUCTOR"));
  544. delegate = w.resolveToReferenceType("com.foo.Marker").getDelegate();
  545. assertTrue(delegate.isInterface());
  546. }
  547. private void assertNotInTypeMap(World w, String string) {
  548. assertNull(w.getTypeMap().get(string));
  549. }
  550. private String stringify(Object[] arr) {
  551. StringBuilder s = new StringBuilder();
  552. for (int i = 0; i < arr.length; i++) {
  553. s.append(arr[i]);
  554. s.append(" ");
  555. }
  556. return "[" + s.toString().trim() + "]";
  557. }
  558. public void testDeletionInnerAspects_278496_4() throws Exception {
  559. String p = "PR278496_4";
  560. initialiseProject(p);
  561. configureNonStandardCompileOptions(p, "-Xset:minimalModel=true");
  562. build(p);
  563. checkWasFullBuild();
  564. // printModel(p);
  565. // Here is the model without deletion.
  566. // PR278496_4 [build configuration file] hid:=PR278496_4
  567. // foo [package] hid:=PR278496_4<foo
  568. // MyOtherClass.java [java source file] 1 hid:=PR278496_4<foo{MyOtherClass.java
  569. // foo [package declaration] 1 hid:=PR278496_4<foo{MyOtherClass.java%foo
  570. // [import reference] hid:=PR278496_4<foo{MyOtherClass.java#
  571. // MyOtherClass [class] 2 hid:=PR278496_4<foo{MyOtherClass.java[MyOtherClass
  572. // MyInnerClass [class] 4 hid:=PR278496_4<foo{MyOtherClass.java[MyOtherClass[MyInnerClass
  573. // MyInnerInnerAspect [aspect] 6 hid:=PR278496_4<foo{MyOtherClass.java[MyOtherClass[MyInnerClass}MyInnerInnerAspect
  574. // before(): <anonymous pointcut> [advice] 8
  575. // hid:=PR278496_4<foo{MyOtherClass.java[MyOtherClass[MyInnerClass}MyInnerInnerAspect&before
  576. // MyClass.java [java source file] 1 hid:=PR278496_4<foo{MyClass.java
  577. // foo [package declaration] 1 hid:=PR278496_4<foo{MyClass.java%foo
  578. // [import reference] hid:=PR278496_4<foo{MyClass.java#
  579. // MyClass [class] 9 hid:=PR278496_4<foo{MyClass.java[MyClass
  580. // main(java.lang.String[]) [method] 12 hid:=PR278496_4<foo{MyClass.java[MyClass~main~\[QString;
  581. // method1() [method] 16 hid:=PR278496_4<foo{MyClass.java[MyClass~method1
  582. // method2() [method] 18 hid:=PR278496_4<foo{MyClass.java[MyClass~method2
  583. // Hid:1:(targets=1) =PR278496_4<foo{MyClass.java[MyClass~method1 (advised by)
  584. // =PR278496_4<foo{MyOtherClass.java[MyOtherClass[MyInnerClass}MyInnerInnerAspect&before
  585. // Hid:2:(targets=1) =PR278496_4<foo{MyOtherClass.java[MyOtherClass[MyInnerClass}MyInnerInnerAspect&before (advises)
  586. // =PR278496_4<foo{MyClass.java[MyClass~method1
  587. AspectJElementHierarchy model = (AspectJElementHierarchy) getModelFor(p).getHierarchy();
  588. IProgramElement ipe = model.findElementForHandleOrCreate(
  589. "=PR278496_4<foo{MyOtherClass.java[MyOtherClass[MyInnerClass'MyInnerInnerAspect", false);
  590. assertNotNull(ipe);
  591. }
  592. public void testDeletionAnonInnerType_278496_8() throws Exception {
  593. AjdeInteractionTestbed.VERBOSE = true;
  594. String p = "pr278496_8";
  595. initialiseProject(p);
  596. configureNonStandardCompileOptions(p, "-Xset:minimalModel=true");
  597. build(p);
  598. checkWasFullBuild();
  599. // printModel(p);
  600. // Here is the model without deletion.
  601. // PR278496_8 [build configuration file] hid:=PR278496_8
  602. // generics [package] hid:=PR278496_8<generics
  603. // DeleteActionAspect.aj [java source file] 1 hid:=PR278496_8<generics*DeleteActionAspect.aj
  604. // generics [package declaration] 1 hid:=PR278496_8<generics*DeleteActionAspect.aj%generics
  605. // [import reference] hid:=PR278496_8<generics*DeleteActionAspect.aj#
  606. // java.util.List [import reference] 3 hid:=PR278496_8<generics*DeleteActionAspect.aj#java.util.List
  607. // DeleteActionAspect [aspect] 6 hid:=PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect
  608. // DeleteAction.delete() [inter-type method] 8
  609. // hid:=PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect)DeleteAction.delete
  610. // DeleteAction.delete2 [inter-type field] 14
  611. // hid:=PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete2
  612. // DeleteAction.delete3 [inter-type field] 16
  613. // hid:=PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete3
  614. // main(java.lang.String[]) [method] 19 hid:=PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;
  615. // new DeleteAction<String>() {..} [class] 20
  616. // hid:=PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[
  617. // getSelected() [method] 21 hid:=PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[~getSelected
  618. // ActionExecutor.java [java source file] 1 hid:=PR278496_8<generics{ActionExecutor.java
  619. // generics [package declaration] 1 hid:=PR278496_8<generics{ActionExecutor.java%generics
  620. // [import reference] hid:=PR278496_8<generics{ActionExecutor.java#
  621. // ActionExecutor [class] 3 hid:=PR278496_8<generics{ActionExecutor.java[ActionExecutor
  622. // main(java.lang.String[]) [method] 4 hid:=PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;
  623. // new DeleteAction<String>() {..} [class] 5 hid:=PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[
  624. // getSelected() [method] 6 hid:=PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[~getSelected
  625. // nothing2(generics.DeleteAction<java.lang.String>) [method] 15
  626. // hid:=PR278496_8<generics{ActionExecutor.java[ActionExecutor~nothing2~QDeleteAction\<QString;>;
  627. // DeleteAction.java [java source file] 1 hid:=PR278496_8<generics{DeleteAction.java
  628. // generics [package declaration] 1 hid:=PR278496_8<generics{DeleteAction.java%generics
  629. // [import reference] hid:=PR278496_8<generics{DeleteAction.java#
  630. // java.util.List [import reference] 2 hid:=PR278496_8<generics{DeleteAction.java#java.util.List
  631. // DeleteAction [interface] 5 hid:=PR278496_8<generics{DeleteAction.java[DeleteAction
  632. // delete() [method] 7 hid:=PR278496_8<generics{DeleteAction.java[DeleteAction~delete
  633. // getSelected() [method] 9 hid:=PR278496_8<generics{DeleteAction.java[DeleteAction~getSelected
  634. // test [package] hid:=PR278496_8<test
  635. // MyAspect.aj [java source file] 1 hid:=PR278496_8<test*MyAspect.aj
  636. // test [package declaration] 1 hid:=PR278496_8<test*MyAspect.aj%test
  637. // [import reference] hid:=PR278496_8<test*MyAspect.aj#
  638. // java.util.List [import reference] 2 hid:=PR278496_8<test*MyAspect.aj#java.util.List
  639. // MyAspect [aspect] 4 hid:=PR278496_8<test*MyAspect.aj'MyAspect
  640. // MyAnnotation [annotation] 47 hid:=PR278496_8<test*MyAspect.aj'MyAspect[MyAnnotation
  641. // Abstract [class] 60 hid:=PR278496_8<test*MyAspect.aj'MyAspect[Abstract
  642. // Demo.version [inter-type field] 7 hid:=PR278496_8<test*MyAspect.aj'MyAspect,Demo.version
  643. // Demo.list [inter-type field] 10 hid:=PR278496_8<test*MyAspect.aj'MyAspect,Demo.list
  644. // Demo.x [inter-type field] 11 hid:=PR278496_8<test*MyAspect.aj'MyAspect,Demo.x
  645. // Demo.foo(java.util.List<java.lang.String>) [inter-type method] 13
  646. // hid:=PR278496_8<test*MyAspect.aj'MyAspect)Demo.foo)QList\<QString;>;
  647. // Demo.Demo(int) [inter-type constructor] 17 hid:=PR278496_8<test*MyAspect.aj'MyAspect)Demo.Demo_new)I
  648. // declare warning: "blah" [declare warning] 21 hid:=PR278496_8<test*MyAspect.aj'MyAspect`declare warning
  649. // declare error: "blah" [declare error] 23 hid:=PR278496_8<test*MyAspect.aj'MyAspect`declare error!2
  650. // declare soft: java.lang.Exception [declare soft] 25 hid:=PR278496_8<test*MyAspect.aj'MyAspect`declare soft!3
  651. // s() [pointcut] 28 hid:=PR278496_8<test*MyAspect.aj'MyAspect"s
  652. // before(): s.. [advice] 31 hid:=PR278496_8<test*MyAspect.aj'MyAspect&before
  653. // after(): s.. [advice] 33 hid:=PR278496_8<test*MyAspect.aj'MyAspect&after
  654. // around(): s.. [advice] 35 hid:=PR278496_8<test*MyAspect.aj'MyAspect&around
  655. // afterReturning(): s.. [advice] 39 hid:=PR278496_8<test*MyAspect.aj'MyAspect&afterReturning
  656. // afterThrowing(): s.. [advice] 41 hid:=PR278496_8<test*MyAspect.aj'MyAspect&afterThrowing
  657. // declare @type: test.Demo : @MyAnnotation [declare @type] 52 hid:=PR278496_8<test*MyAspect.aj'MyAspect`declare \@type
  658. // declare @field: int test.Demo.x : @MyAnnotation [declare @field] 53 hid:=PR278496_8<test*MyAspect.aj'MyAspect`declare
  659. // \@field
  660. // declare @method: void test.Demo.foo(..) : @MyAnnotation [declare @method] 54
  661. // hid:=PR278496_8<test*MyAspect.aj'MyAspect`declare \@method
  662. // declare @constructor: public test.Demo.new(int) : @MyAnnotation [declare @constructor] 55
  663. // hid:=PR278496_8<test*MyAspect.aj'MyAspect`declare \@constructor
  664. // Abstract.nothing() [inter-type method] 58 hid:=PR278496_8<test*MyAspect.aj'MyAspect)Abstract.nothing
  665. // Demo.aj [java source file] 1 hid:=PR278496_8<test*Demo.aj
  666. // test [package declaration] 1 hid:=PR278496_8<test*Demo.aj%test
  667. // [import reference] hid:=PR278496_8<test*Demo.aj#
  668. // test.MyAspect$MyAnnotation [import reference] 1 hid:=PR278496_8<test*Demo.aj#test.MyAspect$MyAnnotation
  669. // java.util.List [import reference] 3 hid:=PR278496_8<test*Demo.aj#java.util.List
  670. // Demo [class] 5 hid:=PR278496_8<test*Demo.aj[Demo
  671. // g() [method] 7 hid:=PR278496_8<test*Demo.aj[Demo~g
  672. // OtherClass.aj [java source file] 1 hid:=PR278496_8<test*OtherClass.aj
  673. // test [package declaration] 1 hid:=PR278496_8<test*OtherClass.aj%test
  674. // [import reference] hid:=PR278496_8<test*OtherClass.aj#
  675. // OtherClass [class] 4 hid:=PR278496_8<test*OtherClass.aj[OtherClass
  676. // x() [method] 5 hid:=PR278496_8<test*OtherClass.aj[OtherClass~x
  677. // test2 [package] hid:=PR278496_8<test2
  678. // MyAspect2.aj [java source file] 1 hid:=PR278496_8<test2*MyAspect2.aj
  679. // test2 [package declaration] 4 hid:=PR278496_8<test2*MyAspect2.aj%test2
  680. // [import reference] hid:=PR278496_8<test2*MyAspect2.aj#
  681. // test.Demo [import reference] 3 hid:=PR278496_8<test2*MyAspect2.aj#test.Demo
  682. // MyAspect2 [aspect] 6 hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2
  683. // Bar [interface] 8 hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2[Bar
  684. // Foo [class] 18 hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2[Foo
  685. // Foo() [constructor] 19 hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2[Foo~Foo
  686. // declare parents: implements MyAspect2$Bar,Cloneable [declare parents] 11
  687. // hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2`declare parents
  688. // Bar.bar() [inter-type method] 13 hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2)Bar.bar
  689. // declare parents: extends MyAspect2$Foo [declare parents] 23 hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2`declare
  690. // parents!2
  691. // Foo.baz() [inter-type method] 25 hid:=PR278496_8<test2*MyAspect2.aj'MyAspect2)Foo.baz
  692. // OtherClass2.aj [java source file] 1 hid:=PR278496_8<test2*OtherClass2.aj
  693. // test2 [package declaration] 1 hid:=PR278496_8<test2*OtherClass2.aj%test2
  694. // [import reference] hid:=PR278496_8<test2*OtherClass2.aj#
  695. // test.Demo [import reference] 3 hid:=PR278496_8<test2*OtherClass2.aj#test.Demo
  696. // OtherClass2 [class] 5 hid:=PR278496_8<test2*OtherClass2.aj[OtherClass2
  697. // x() [method] 6 hid:=PR278496_8<test2*OtherClass2.aj[OtherClass2~x
  698. // Hid:1:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect,Demo.version (declared on) =PR278496_8<test*Demo.aj[Demo
  699. // Hid:2:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect)Abstract.nothing (declared on)
  700. // =PR278496_8<test*MyAspect.aj'MyAspect[Abstract
  701. // Hid:3:(targets=1) =PR278496_8<test*Demo.aj[Demo (annotated by) =PR278496_8<test*MyAspect.aj'MyAspect`declare \@type
  702. // Hid:4:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations) =PR278496_8<test2*MyAspect2.aj'MyAspect2`declare
  703. // parents!2
  704. // Hid:5:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations) =PR278496_8<test2*MyAspect2.aj'MyAspect2`declare
  705. // parents
  706. // Hid:6:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations) =PR278496_8<test2*MyAspect2.aj'MyAspect2)Bar.bar
  707. // Hid:7:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations) =PR278496_8<test*MyAspect.aj'MyAspect,Demo.version
  708. // Hid:8:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations) =PR278496_8<test*MyAspect.aj'MyAspect,Demo.list
  709. // Hid:9:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations) =PR278496_8<test*MyAspect.aj'MyAspect,Demo.x
  710. // Hid:10:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations)
  711. // =PR278496_8<test*MyAspect.aj'MyAspect)Demo.foo)QList\<QString;>;
  712. // Hid:11:(targets=8) =PR278496_8<test*Demo.aj[Demo (aspect declarations)
  713. // =PR278496_8<test*MyAspect.aj'MyAspect)Demo.Demo_new)I
  714. // Hid:12:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect`declare \@type (annotates) =PR278496_8<test*Demo.aj[Demo
  715. // Hid:13:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect,Demo.list (declared on) =PR278496_8<test*Demo.aj[Demo
  716. // Hid:14:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect)Demo.foo)QList\<QString;>; (declared on)
  717. // =PR278496_8<test*Demo.aj[Demo
  718. // Hid:15:(targets=1) =PR278496_8<test2*MyAspect2.aj'MyAspect2`declare parents!2 (declared on) =PR278496_8<test*Demo.aj[Demo
  719. // Hid:16:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete2 (declared on)
  720. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[
  721. // Hid:17:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete2 (declared on)
  722. // =PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[
  723. // Hid:18:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete2 (declared on)
  724. // =PR278496_8<generics{DeleteAction.java[DeleteAction
  725. // Hid:19:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect`declare \@constructor (annotates)
  726. // =PR278496_8<test*MyAspect.aj'MyAspect)Demo.Demo_new)I
  727. // Hid:20:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete3 (declared on)
  728. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[
  729. // Hid:21:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete3 (declared on)
  730. // =PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[
  731. // Hid:22:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete3 (declared on)
  732. // =PR278496_8<generics{DeleteAction.java[DeleteAction
  733. // Hid:23:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect[Abstract (aspect declarations)
  734. // =PR278496_8<test*MyAspect.aj'MyAspect)Abstract.nothing
  735. // Hid:24:(targets=1) =PR278496_8<test2*MyAspect2.aj'MyAspect2`declare parents (declared on) =PR278496_8<test*Demo.aj[Demo
  736. // Hid:25:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect)DeleteAction.delete (declared on)
  737. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[
  738. // Hid:26:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect)DeleteAction.delete (declared on)
  739. // =PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[
  740. // Hid:27:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect)DeleteAction.delete (declared on)
  741. // =PR278496_8<generics{DeleteAction.java[DeleteAction
  742. // Hid:28:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect`declare \@field (annotates)
  743. // =PR278496_8<test*MyAspect.aj'MyAspect,Demo.x
  744. // Hid:29:(targets=3) =PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[ (aspect declarations)
  745. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect)DeleteAction.delete
  746. // Hid:30:(targets=3) =PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[ (aspect declarations)
  747. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete2
  748. // Hid:31:(targets=3) =PR278496_8<generics{ActionExecutor.java[ActionExecutor~main~\[QString;[ (aspect declarations)
  749. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete3
  750. // Hid:32:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[ (aspect declarations)
  751. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect)DeleteAction.delete
  752. // Hid:33:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[ (aspect declarations)
  753. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete2
  754. // Hid:34:(targets=3) =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\[QString;[ (aspect declarations)
  755. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete3
  756. // Hid:35:(targets=3) =PR278496_8<generics{DeleteAction.java[DeleteAction (aspect declarations)
  757. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect)DeleteAction.delete
  758. // Hid:36:(targets=3) =PR278496_8<generics{DeleteAction.java[DeleteAction (aspect declarations)
  759. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete2
  760. // Hid:37:(targets=3) =PR278496_8<generics{DeleteAction.java[DeleteAction (aspect declarations)
  761. // =PR278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect,DeleteAction.delete3
  762. // Hid:38:(targets=1) =PR278496_8<test2*MyAspect2.aj'MyAspect2[Foo (aspect declarations)
  763. // =PR278496_8<test2*MyAspect2.aj'MyAspect2)Foo.baz
  764. // Hid:39:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect)Demo.Demo_new)I (annotated by)
  765. // =PR278496_8<test*MyAspect.aj'MyAspect`declare \@constructor
  766. // Hid:40:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect)Demo.Demo_new)I (declared on) =PR278496_8<test*Demo.aj[Demo
  767. // Hid:41:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect,Demo.x (annotated by)
  768. // =PR278496_8<test*MyAspect.aj'MyAspect`declare \@field
  769. // Hid:42:(targets=1) =PR278496_8<test*MyAspect.aj'MyAspect,Demo.x (declared on) =PR278496_8<test*Demo.aj[Demo
  770. // Hid:43:(targets=2) =PR278496_8<test2*MyAspect2.aj'MyAspect2)Bar.bar (declared on)
  771. // =PR278496_8<test2*MyAspect2.aj'MyAspect2[Bar
  772. // Hid:44:(targets=2) =PR278496_8<test2*MyAspect2.aj'MyAspect2)Bar.bar (declared on) =PR278496_8<test*Demo.aj[Demo
  773. // Hid:45:(targets=1) =PR278496_8<test2*MyAspect2.aj'MyAspect2[Bar (aspect declarations)
  774. // =PR278496_8<test2*MyAspect2.aj'MyAspect2)Bar.bar
  775. // Hid:46:(targets=1) =PR278496_8<test2*MyAspect2.aj'MyAspect2)Foo.baz (declared on)
  776. // =PR278496_8<test2*MyAspect2.aj'MyAspect2[Foo
  777. AspectJElementHierarchy model = (AspectJElementHierarchy) getModelFor(p).getHierarchy();
  778. // check handle to anonymous inner:
  779. IProgramElement ipe = model.findElementForHandleOrCreate(
  780. "=pr278496_8<generics*DeleteActionAspect.aj'DeleteActionAspect~main~\\[QString;[", false);
  781. assertNotNull(ipe);
  782. }
  783. }