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