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.

PointcutsCW.java 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. package langlib;
  2. import org.aspectj.testing.Tester;
  3. import java.awt.Button;
  4. import java.awt.event.ActionEvent;
  5. import java.beans.PropertyChangeListener;
  6. import java.io.*;
  7. import java.lang.reflect.Method;
  8. import javax.swing.*;
  9. import javax.swing.Action;
  10. // DO NOT CHANGE LINEATION! WARNING NUMBERS DEPEND ON IT! See grep below
  11. /**
  12. * todo yet untested:
  13. * - dynamic calls
  14. */
  15. public aspect PointcutsCW {
  16. declare error: Pointcuts.never() : "never";
  17. declare error: within(PointcutsCW) && Pointcuts.never() : "never";
  18. declare warning: Pointcuts.mainExecution() : "mainExecution";
  19. declare warning: Pointcuts.anyMethodExecution() : "anyMethodExecution";
  20. declare warning: Pointcuts.anyPublicMethodExecution() : "anyPublicMethodExecution";
  21. declare warning: Pointcuts.anyNonPrivateMethodExecution() : "anyNonPrivateMethodExecution";
  22. declare warning: Pointcuts.anyConstructorExecution() : "anyConstructorExecution";
  23. declare warning: Pointcuts.anyPublicConstructorExecution() : "anyPublicConstructorExecution";
  24. declare warning: Pointcuts.anyNonPrivateConstructorExecution() : "anyNonPrivateConstructorExecution";
  25. declare warning: Pointcuts.anyPublicFieldGet() : "anyPublicFieldGet";
  26. declare warning: Pointcuts.anyNonPrivateFieldGet() : "anyNonPrivateFieldGet";
  27. declare warning: Pointcuts.anyPublicFieldSet() : "anyPublicFieldSet";
  28. declare warning: Pointcuts.anyNonPrivateFieldSet() : "anyNonPrivateFieldSet";
  29. declare warning: Pointcuts.withinSetter() : "withinSetter";
  30. declare warning: Pointcuts.withinGetter() : "withinGetter";
  31. declare warning: Pointcuts.anyNonPublicFieldSetOutsideConstructorOrSetter() : "anyNonPublicFieldSetOutsideConstructorOrSetter";
  32. declare warning: Pointcuts.anyRunnableImplementation() : "anyRunnableImplementation";
  33. declare warning: Pointcuts.anyGetSystemErrOut() : "anyGetSystemErrOut";
  34. declare warning: Pointcuts.anySetSystemErrOut() : "anySetSystemErrOut";
  35. declare warning: Pointcuts.withinAnyJavaCode() : "withinAnyJavaCode"; // XXX
  36. declare warning: Pointcuts.notWithinJavaCode() : "notWithinJavaCode"; // XXX
  37. declare warning: Pointcuts.toStringExecution() : "toStringExecution";
  38. declare warning: Pointcuts.anyThreadConstruction() : "anyThreadConstruction";
  39. declare warning: Pointcuts.anyJavaIOCalls() : "anyJavaIOCalls";
  40. declare warning: Pointcuts.anyJavaAWTOrSwingCalls() : "anyJavaAWTOrSwingCalls";
  41. declare warning: Pointcuts.cloneImplementationsInNonCloneable() : "cloneImplementationsInNonCloneable";
  42. declare warning: Pointcuts.runImplementationsInNonRunnable() : "runImplementationsInNonRunnable";
  43. declare warning: Pointcuts.anySystemReflectiveCalls() : "anySystemReflectiveCalls";
  44. declare warning: Pointcuts.anySystemClassLoadingCalls() : "anySystemClassLoadingCalls";
  45. declare warning: Pointcuts.anySystemProcessSpawningCalls() : "anySystemProcessSpawningCalls";
  46. declare warning: Pointcuts.mostThrowableReadCalls() : "mostThrowableReadCalls";
  47. declare warning: Pointcuts.exceptionWrappingCalls() : "exceptionWrappingCalls";
  48. public static int publicStaticInt;
  49. public int publicInt;
  50. private static int privateStaticInt;
  51. private int privateInt;
  52. static int defaultStaticInt;
  53. int defaultInt;
  54. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  55. public static void main(String[] list) {
  56. new PointcutsCW().toString(); // RT cflowMainExecution
  57. }
  58. private PointcutsCW() {} // CW anyConstructorExecution
  59. public PointcutsCW(int i) {} // CW anyConstructorExecution, anyPublicConstructorExecution, anyNonPrivateConstructorExecution
  60. PointcutsCW(String s) { // CW anyConstructorExecution, anyNonPrivateConstructorExecution
  61. defaultInt = 0; // CW anyNonPrivateFieldSet
  62. }
  63. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  64. public String toString() {// CW toStringExecution
  65. return "";
  66. }
  67. private int perrorCode() { } // CW anyMethodExecution
  68. private void setInt() { // CW anyMethodExecution,
  69. defaultInt = 0; // CW anyNonPrivateFieldSet, withinSetter
  70. }
  71. private int getInt() {
  72. return defaultInt; // CW anyNonPrivateFieldGet, withinGetter
  73. }
  74. static class NotRunnable {
  75. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  76. public void run() { // CW runImplementationsInNonRunnable
  77. }
  78. }
  79. static class R implements Runnable { // CW anyRunnableImplementation
  80. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  81. public void run() {
  82. }
  83. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  84. public Object clone() { // CW cloneImplementationsInNonCloneable
  85. return null;
  86. }
  87. }
  88. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  89. public static void pserrorCode() throws IOException {
  90. i = publicStaticInt; // CW anyPublicFieldGet, anyNonPrivateFieldGet
  91. i = publicInt; // CW anyPublicFieldGet, anyNonPrivateFieldGet
  92. i = privateStaticInt;
  93. i = privateInt;
  94. i = defaultStaticInt; // CW anyNonPrivateFieldGet
  95. i = defaultInt; // CW anyNonPrivateFieldGet
  96. publicStaticInt = 1; // CW anyPublicFieldSet, anyNonPrivateFieldSet
  97. publicInt = 1; // CW anyPublicFieldSet, anyNonPrivateFieldSet
  98. // for these 4: CW anyNonPublicFieldSetOutsideConstructorOrSetter
  99. privateStaticInt = 1;
  100. privateInt = 1;
  101. defaultStaticInt = 1; // CW anyNonPrivateFieldSet
  102. defaultInt = 1; // CW anyNonPrivateFieldSet
  103. System.out.println(""); // CW anyGetSystemErrOut, anyNonPrivateFieldGet, anyPublicFieldGet
  104. System.err.println(""); // CW anyGetSystemErrOut, anyNonPrivateFieldGet anyPublicFieldGet
  105. new Thread((Runnable)null); // CW anyThreadConstruction
  106. FileReader fr = new FileReader("none"); // CW anyJavaIOCalls
  107. int i = fr.read(); // CW anyJavaIOCalls
  108. DefaultListModel model = new DefaultListModel(); // CW anyJavaAWTOrSwingCalls
  109. model.addElement(null); // CW anyJavaAWTOrSwingCalls
  110. Button button = new Button(); // CW anyJavaAWTOrSwingCalls
  111. button.addActionListener(null); // CW anyJavaAWTOrSwingCalls
  112. String myName = PointcutsCW.class.getName();
  113. Class me = Class.forName(myName); // CW anySystemClassLoadingCalls
  114. Method m = me.getDeclaredMethod("notFound", new Class[]{}); // CW anySystemReflectiveCalls
  115. Process p = Runtime.exec("ls"); // CW anySystemProcessSpawningCalls
  116. Error e = new Error("hello");
  117. e.getMessage(); // CW mostThrowableReadCalls
  118. e.printStackTrace(); // CW mostThrowableReadCalls
  119. e.getClass(); // CW mostThrowableReadCalls
  120. }
  121. }
  122. aspect DynamicTests {
  123. static {
  124. Tester.expectEvent("mainExecution");
  125. Tester.expectEvent("cflowMainExecution");
  126. Tester.expectEvent("adviceCflow");
  127. Tester.expectEvent("notInAdviceCflow");
  128. }
  129. after(PointcutsCE pointcutsCE) returning : target(pointcutsCE)
  130. && Pointcuts.cflowMainExecution() && call(String toString()) {
  131. String targ = pointcutsCE.toString();
  132. Tester.event("cflowMainExecution");
  133. Tester.event("adviceCflow");
  134. }
  135. after(PointcutsCE pointcutsCE) returning : target(pointcutsCE)
  136. && notInAdviceCflow() && call(String toString()) {
  137. Tester.event("notInAdviceCflow"); // should only get one of these
  138. }
  139. after() returning : within(PointcutsCE) && Pointcuts.mainExecution() {
  140. Tester.event("mainExecution"); // also cflowMainExecution
  141. Tester.checkAllEvents();
  142. }
  143. }
  144. /*
  145. grep -n " CW" PointcutsCW.java \
  146. | sed 's|^\(.*\)\:.*\/\/*CW \(.*\)$|<message kind="warning" line="\1" text="\2"/>|' \
  147. > messages.txt
  148. */