1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import org.aspectj.testing.Tester;
-
- import java.util.*;
-
- import org.aspectj.lang.reflect.*;
-
- public class Interfaces {
- public static void main(String[] args) {
- String v = I.staticField;
- Tester.checkEqual(notes, "I.staticField", "static init of I");
- Tester.checkEqual(v, "I.staticField");
- clearNotes();
-
- I i = (I)new C();
- Tester.checkEqual(notes,
- "initialize-I instanceField-A* I.instanceField privateField-A* I.privateField-from-A privateField-A* I.privateField-from-B",
- "inst init of I");
- Tester.checkEqual(i.instanceField, "I.instanceField");
- clearNotes();
-
- v = SubI.staticField;
- Tester.checkEqual(notes, "SubI.staticField", "static init of SubI");
- Tester.checkEqual(v, "SubI.staticField");
- clearNotes();
-
- SubI si = (SubI)new SubC();
- Tester.checkEqual(notes,
- "initialize-I instanceField-A* I.instanceField privateField-A* I.privateField-from-A privateField-A* I.privateField-from-B SubI.instanceField",
- "inst init of SubI");
- Tester.checkEqual(si.instanceField, "SubI.instanceField");
- clearNotes();
-
-
- i.instanceField += "-XXX";
- Tester.checkEqual(notes, "I.instanceField-!I||A*", "I.instanceField set");
- Tester.checkEqual(i.instanceField, "I.instanceField-XXX");
- }
-
- private static List notes = new LinkedList();
-
- public static void clearNotes() {
- notes = new LinkedList();
- //System.out.println("***********************************************");
- }
-
- public static String note(String note) {
- notes.add(note);
- //System.out.println(note);
- return note;
- }
- }
-
- class C implements I {
- String instanceField = "C.instanceField";
- }
-
- class SubC extends C implements SubI {
- String instanceField = "SubC.instanceField";
- }
-
- interface I {
- // must follow standard Java rules
- String staticField = Interfaces.note("I.staticField");
- }
-
- interface SubI extends I {
- String staticField = Interfaces.note("SubI.staticField");
- }
-
-
-
- aspect A1 {
- public String SubI.instanceField = Interfaces.note("SubI.instanceField");
-
- public String I.instanceField = Interfaces.note("I.instanceField");
- private String I.privateField = Interfaces.note("I.privateField-from-A");
- }
-
- aspect A2 {
- private String I.privateField = Interfaces.note("I.privateField-from-B");
- }
-
- aspect A3 {
- before(I i): !within(I||A*) && set(String I.*) && target(i) {
- Interfaces.note(thisJoinPoint.getSignature().toShortString()+"-!I||A*"); // +"::" + thisJoinPoint.getSourceLocation().getWithinType());
- }
-
- before(I i): within(I) && set(String I.*) && target(i) {
- Interfaces.note(thisJoinPoint.getSignature().getName()+"-I"); //toShortString());
- }
- before(I i): within(A*) && set(String I.*) && target(i) {
- Interfaces.note(thisJoinPoint.getSignature().getName()+"-A*"); //toShortString());
- }
-
- before(I i): initialization(I.new(..)) && target(i) {
- Interfaces.note("initialize-I");
- }
- }
|