summaryrefslogtreecommitdiffstats
path: root/tests/design/intro/Interfaces.java
diff options
context:
space:
mode:
Diffstat (limited to 'tests/design/intro/Interfaces.java')
-rw-r--r--tests/design/intro/Interfaces.java98
1 files changed, 98 insertions, 0 deletions
diff --git a/tests/design/intro/Interfaces.java b/tests/design/intro/Interfaces.java
new file mode 100644
index 000000000..67ca0f684
--- /dev/null
+++ b/tests/design/intro/Interfaces.java
@@ -0,0 +1,98 @@
+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");
+ }
+}