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.

AsmRelationshipMapExtensionTest.java 3.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package org.aspectj.samples;
  2. import java.util.Iterator;
  3. import java.util.List;
  4. import org.aspectj.ajde.AjdeTestCase;
  5. import org.aspectj.asm.*;
  6. import org.aspectj.asm.internal.ProgramElement;
  7. import org.aspectj.bridge.ISourceLocation;
  8. import org.aspectj.weaver.AsmRelationshipProvider;
  9. import org.aspectj.weaver.ResolvedTypeX;
  10. /**
  11. * @author Mik Kersten
  12. */
  13. public class AsmRelationshipMapExtensionTest extends AjdeTestCase {
  14. public void testDeclares() {
  15. System.out.println("----------------------------------");
  16. System.out.println("Parents declared by declare parents statements: ");
  17. HierarchyWalker walker = new HierarchyWalker() {
  18. public void preProcess(IProgramElement node) {
  19. if (node.getKind().equals(IProgramElement.Kind.DECLARE_PARENTS)) {
  20. System.out.println(node);
  21. List relations = AsmManager.getDefault().getRelationshipMap().get(node);
  22. if (relations != null) {
  23. for (Iterator it = relations.iterator(); it.hasNext();) {
  24. IRelationship relationship = (IRelationship) it.next();
  25. List targets = relationship.getTargets();
  26. for (Iterator iter = targets.iterator(); iter.hasNext();) {
  27. IProgramElement currElt = AsmManager
  28. .getDefault().getHierarchy()
  29. .getElement((String) iter.next());
  30. System.out.println("--> " + relationship.getName() + ": " + currElt);
  31. }
  32. }
  33. }
  34. }
  35. }
  36. };
  37. AsmManager.getDefault().getHierarchy().getRoot().walk(walker);
  38. }
  39. protected void setUp() throws Exception {
  40. AsmRelationshipProvider.setDefault(new DeclareInfoProvider());
  41. super.setUp("examples");
  42. assertTrue("build success",
  43. doSynchronousBuild("../examples/coverage/coverage.lst"));
  44. }
  45. }
  46. class DeclareInfoProvider extends AsmRelationshipProvider {
  47. public void addDeclareParentsRelationship(ISourceLocation decp,
  48. ResolvedTypeX targetType, List newParents) {
  49. super.addDeclareParentsRelationship(decp, targetType, newParents);
  50. for (Iterator it = newParents.iterator(); it.hasNext();) {
  51. ResolvedTypeX superType = (ResolvedTypeX) it.next();
  52. String sourceHandle = ProgramElement.createHandleIdentifier(
  53. decp.getSourceFile(),decp.getLine(),decp.getColumn(), decp.getOffset());
  54. IProgramElement ipe = AsmManager.getDefault().getHierarchy().findElementForHandle(sourceHandle);
  55. String superHandle = ProgramElement.createHandleIdentifier(
  56. superType.getSourceLocation().getSourceFile(),
  57. superType.getSourceLocation().getLine(),
  58. superType.getSourceLocation().getColumn(),
  59. superType.getSourceLocation().getOffset()
  60. );
  61. if (sourceHandle != null && superHandle != null) {
  62. IRelationship foreward = AsmManager.getDefault().getRelationshipMap().get(
  63. sourceHandle,
  64. IRelationship.Kind.DECLARE,
  65. "super types declared",
  66. false,
  67. true);
  68. foreward.addTarget(superHandle);
  69. IRelationship back = AsmManager.getDefault().getRelationshipMap().get(
  70. superHandle, IRelationship.Kind.DECLARE,
  71. "declared as super type by",
  72. false,
  73. true);
  74. back.addTarget(sourceHandle);
  75. }
  76. }
  77. }
  78. }