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.

IntroOnIntro.java 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import org.aspectj.testing.*;
  2. public class IntroOnIntro {
  3. public static void main(String[] args) {
  4. Class1 c1 = new Class1();
  5. try {
  6. c1.getName();
  7. } catch (NoSuchMethodError nsme) {
  8. Tester.check(false, "getName was not found in Class1");
  9. }
  10. try {
  11. c1.m = "potato";
  12. } catch (NoSuchFieldError nsfe) {
  13. Tester.check(false, "m was not introduced into Class1");
  14. }
  15. }
  16. }
  17. class Class1 {
  18. String name = ""; //public String getName() { return name; }
  19. }
  20. aspect Aspect1 /**of eachobject (instanceof(Class1))*/ {
  21. public String Class1.getName() { return this.name; }
  22. void f() {}
  23. before(): call(* getName(..)) && this(Class1) {
  24. f();
  25. }
  26. }
  27. aspect AComposer /**of eachobject(instanceof(Class1 || Aspect1))*/ {
  28. interface HasManager {}
  29. private String HasManager.my_manager;
  30. String HasManager.m;
  31. public void HasManager.setManager(String manager) {
  32. this.my_manager = manager;
  33. }
  34. declare parents: Class1 || Aspect1 implements HasManager;
  35. before(Aspect1 a1): call(void f()) && this(a1) {
  36. try {
  37. a1.setManager("potato");
  38. } catch (NoSuchMethodError nsme) {
  39. Tester.check(false, "getName not found in Aspect1");
  40. }
  41. try {
  42. a1.m = "potato";
  43. } catch (NoSuchFieldError nsfe) {
  44. Tester.check(false, "m was not introduced into Class1");
  45. }
  46. }
  47. }