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.

AsmRelationshipsTests.java 8.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /* *******************************************************************
  2. * Copyright (c) 2002 Palo Alto Research Center, Incorporated (PARC).
  3. * All rights reserved.
  4. * This program and the accompanying materials are made available
  5. * under the terms of the Eclipse Public License v1.0
  6. * which accompanies this distribution and is available at
  7. * http://www.eclipse.org/legal/epl-v10.html
  8. *
  9. * ******************************************************************/
  10. package org.aspectj.ajde.core.tests.model;
  11. import java.io.File;
  12. import java.util.Iterator;
  13. import java.util.List;
  14. import org.aspectj.ajde.core.AjdeCoreTestCase;
  15. import org.aspectj.ajde.core.TestCompilerConfiguration;
  16. import org.aspectj.asm.AsmManager;
  17. import org.aspectj.asm.IProgramElement;
  18. import org.aspectj.asm.IRelationship;
  19. public class AsmRelationshipsTests extends AjdeCoreTestCase {
  20. private AsmManager manager = null;
  21. private final String[] files = new String[] { "ModelCoverage.java", "pkg" + File.separator + "InPackage.java" };
  22. private TestCompilerConfiguration compilerConfig;
  23. @Override
  24. protected void setUp() throws Exception {
  25. super.setUp();
  26. initialiseProject("coverage");
  27. compilerConfig = (TestCompilerConfiguration) getCompiler().getCompilerConfiguration();
  28. compilerConfig.setProjectSourceFiles(getSourceFileList(files));
  29. doBuild();
  30. manager = AsmManager.lastActiveStructureModel;
  31. }
  32. @Override
  33. protected void tearDown() throws Exception {
  34. super.tearDown();
  35. compilerConfig = null;
  36. manager = null;
  37. }
  38. // // see pr148027
  39. // public void testUsesPointcut() {
  40. // if (!AsmHierarchyBuilder.shouldAddUsesPointcut) return;
  41. //
  42. // IProgramElement ptUsage = AsmManager.getDefault().getHierarchy().findElementForType(null, "PointcutUsage");
  43. // assertNotNull(ptUsage);
  44. // IProgramElement pts = AsmManager.getDefault().getHierarchy().findElementForType(null, "Pointcuts");
  45. // assertNotNull(pts);
  46. //
  47. // IProgramElement pUsesA = manager.getHierarchy().findElementForLabel(
  48. // ptUsage,
  49. // IProgramElement.Kind.POINTCUT,
  50. // "usesA()"/*Point"*/);
  51. // assertNotNull(pUsesA);
  52. //
  53. // IProgramElement ptsA = manager.getHierarchy().findElementForLabel(
  54. // pts,
  55. // IProgramElement.Kind.POINTCUT,
  56. // "a()"/*Point"*/);
  57. // assertNotNull(ptsA);
  58. //
  59. // assertTrue(AsmManager.getDefault().getRelationshipMap().get(pUsesA).size()>0);
  60. // assertTrue(AsmManager.getDefault().getRelationshipMap().get(ptsA).size()>0);
  61. // }
  62. public void testDeclareParents() {
  63. IProgramElement aspect = manager.getHierarchy().findElementForType(null, "DeclareCoverage");
  64. IProgramElement dp = manager.getHierarchy().findElementForLabel(aspect, IProgramElement.Kind.DECLARE_PARENTS,
  65. "declare parents: implements Serializable"/* Point" */);
  66. assertNotNull(dp);
  67. /* List relations = */manager.getRelationshipMap().get(dp);
  68. List<IRelationship> rels = manager.getRelationshipMap().get(dp);
  69. assertTrue(rels.size() > 0);
  70. // assertTrue(rel.getTargets().size() > 0);
  71. //
  72. // checkDeclareMapping("DeclareCoverage", "Point", ,
  73. // "Point", "matched by", "matches declare",
  74. // IProgramElement.Kind.DECLARE_PARENTS);
  75. }
  76. public void testDeclareWarningAndError() {
  77. checkDeclareMapping("DeclareCoverage", "Point", "declare warning: \"Illegal call.\"", "method-call(void Point.setX(int))",
  78. "matched by", "matches declare", IProgramElement.Kind.DECLARE_WARNING);
  79. }
  80. public void testInterTypeDeclarations() {
  81. checkInterTypeMapping("InterTypeDecCoverage", "Point", "Point.xxx", "Point", "declared on", "aspect declarations",
  82. IProgramElement.Kind.INTER_TYPE_FIELD);
  83. checkInterTypeMapping("InterTypeDecCoverage", "Point", "Point.check(int,Line)", "Point", "declared on",
  84. "aspect declarations", IProgramElement.Kind.INTER_TYPE_METHOD);
  85. }
  86. public void testAdvice() {
  87. checkMapping("AdvisesRelationshipCoverage", "Point", "before(): methodExecutionP..", "setX(int)", "advises", "advised by");
  88. checkUniDirectionalMapping("AdvisesRelationshipCoverage", "Point", "before(): getP..", "field-get(int Point.x)", "advises");
  89. checkUniDirectionalMapping("AdvisesRelationshipCoverage", "Point", "before(): setP..", "field-set(int Point.x)", "advises");
  90. }
  91. private void checkDeclareMapping(String fromType, String toType, String from, String to, String forwardRelName,
  92. String backRelName, IProgramElement.Kind kind) {
  93. IProgramElement aspect = manager.getHierarchy().findElementForType(null, fromType);
  94. assertNotNull(aspect);
  95. String beforeExec = from;
  96. IProgramElement beforeExecNode = manager.getHierarchy().findElementForLabel(aspect, kind, beforeExec);
  97. assertNotNull(beforeExecNode);
  98. IRelationship rel = manager.getRelationshipMap().get(beforeExecNode, IRelationship.Kind.DECLARE, forwardRelName);
  99. assertTrue(rel.getTargets().size() > 0);
  100. String handle = rel.getTargets().get(0);
  101. assertEquals(manager.getHierarchy().findElementForHandle(handle).toString(), to);
  102. IProgramElement clazz = manager.getHierarchy().findElementForType(null, toType);
  103. assertNotNull(clazz);
  104. String set = to;
  105. IProgramElement setNode = manager.getHierarchy().findElementForLabel(clazz, IProgramElement.Kind.CODE, set);
  106. assertNotNull(setNode);
  107. IRelationship rel2 = manager.getRelationshipMap().get(setNode, IRelationship.Kind.DECLARE, backRelName);
  108. String handle2 = rel2.getTargets().get(0);
  109. assertEquals(manager.getHierarchy().findElementForHandle(handle2).toString(), from);
  110. }
  111. private void checkUniDirectionalMapping(String fromType, String toType, String from, String to, String relName) {
  112. IProgramElement aspect = manager.getHierarchy().findElementForType(null, fromType);
  113. assertNotNull(aspect);
  114. String beforeExec = from;
  115. IProgramElement beforeExecNode = manager.getHierarchy()
  116. .findElementForLabel(aspect, IProgramElement.Kind.ADVICE, beforeExec);
  117. assertNotNull(beforeExecNode);
  118. IRelationship rel = manager.getRelationshipMap().get(beforeExecNode, IRelationship.Kind.ADVICE, relName);
  119. for (Iterator<String> it = rel.getTargets().iterator(); it.hasNext();) {
  120. String currHandle = it.next();
  121. if (manager.getHierarchy().findElementForHandle(currHandle).toLabelString().equals(to))
  122. return;
  123. }
  124. fail(); // didn't find it
  125. }
  126. private void checkMapping(String fromType, String toType, String from, String to, String forwardRelName, String backRelName) {
  127. IProgramElement aspect = manager.getHierarchy().findElementForType(null, fromType);
  128. assertNotNull(aspect);
  129. String beforeExec = from;
  130. IProgramElement beforeExecNode = manager.getHierarchy()
  131. .findElementForLabel(aspect, IProgramElement.Kind.ADVICE, beforeExec);
  132. assertNotNull(beforeExecNode);
  133. IRelationship rel = manager.getRelationshipMap().get(beforeExecNode, IRelationship.Kind.ADVICE, forwardRelName);
  134. String handle = rel.getTargets().get(0);
  135. assertEquals(manager.getHierarchy().findElementForHandle(handle).toString(), to);
  136. IProgramElement clazz = manager.getHierarchy().findElementForType(null, toType);
  137. assertNotNull(clazz);
  138. String set = to;
  139. IProgramElement setNode = manager.getHierarchy().findElementForLabel(clazz, IProgramElement.Kind.METHOD, set);
  140. assertNotNull(setNode);
  141. IRelationship rel2 = manager.getRelationshipMap().get(setNode, IRelationship.Kind.ADVICE, backRelName);
  142. String handle2 = rel2.getTargets().get(0);
  143. assertEquals(manager.getHierarchy().findElementForHandle(handle2).toString(), from);
  144. }
  145. private void checkInterTypeMapping(String fromType, String toType, String from, String to, String forwardRelName,
  146. String backRelName, IProgramElement.Kind declareKind) {
  147. IProgramElement aspect = manager.getHierarchy().findElementForType(null, fromType);
  148. assertNotNull(aspect);
  149. String beforeExec = from;
  150. IProgramElement fromNode = manager.getHierarchy().findElementForLabel(aspect, declareKind, beforeExec);
  151. assertNotNull(fromNode);
  152. IRelationship rel = manager.getRelationshipMap().get(fromNode, IRelationship.Kind.DECLARE_INTER_TYPE, forwardRelName);
  153. String handle = rel.getTargets().get(0);
  154. assertEquals(manager.getHierarchy().findElementForHandle(handle).toString(), to);
  155. IProgramElement clazz = manager.getHierarchy().findElementForType(null, toType);
  156. assertNotNull(clazz);
  157. // String set = to;
  158. IRelationship rel2 = manager.getRelationshipMap().get(clazz, IRelationship.Kind.DECLARE_INTER_TYPE, backRelName);
  159. // String handle2 = (String)rel2.getTargets().get(0);
  160. for (Iterator<String> it = rel2.getTargets().iterator(); it.hasNext();) {
  161. String currHandle = it.next();
  162. if (manager.getHierarchy().findElementForHandle(currHandle).toLabelString().equals(from))
  163. return;
  164. }
  165. fail(); // didn't find it
  166. }
  167. }