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 9.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package org.aspectj.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 java.util.*;
  9. import javax.swing.*;
  10. import javax.swing.Action;
  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. declare warning: Pointcuts.anyCollectionWriteCalls() : "anyCollectionWriteCalls";
  49. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  50. public static void main(String[] list) {
  51. new MemberTests(0).toString(); // RT cflowMainExecution
  52. }
  53. }
  54. class MemberTests {
  55. public static int publicStaticInt;
  56. public int publicInt;
  57. private static int privateStaticInt;
  58. private int privateInt;
  59. static int defaultStaticInt;
  60. int defaultInt;
  61. private MemberTests() {} // CW anyConstructorExecution
  62. public MemberTests(int i) {} // CW anyConstructorExecution, anyPublicConstructorExecution, anyNonPrivateConstructorExecution
  63. MemberTests(String s) { // CW anyConstructorExecution, anyNonPrivateConstructorExecution
  64. defaultInt = 0; // CW anyNonPrivateFieldSet
  65. }
  66. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  67. public String toString() {// CW toStringExecution
  68. return "";
  69. }
  70. private int pperrorCode() { return 0; } // CW anyMethodExecution
  71. private void setInt(int i) { // CW anyMethodExecution,
  72. defaultInt = i; // CW anyNonPrivateFieldSet, withinSetter
  73. }
  74. private int getInt() {
  75. return defaultInt; // CW anyNonPrivateFieldGet, withinGetter
  76. }
  77. static class NotRunnable {
  78. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  79. public void run() { // CW runImplementationsInNonRunnable
  80. }
  81. }
  82. static class R implements Runnable { // CW anyRunnableImplementation
  83. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  84. public void run() {
  85. int i = 1; // hmm -- getting 110 here instead of 109?
  86. }
  87. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  88. public Object clone() { // CW cloneImplementationsInNonCloneable
  89. return null;
  90. }
  91. }
  92. // CW anyMethodExecution, anyPublicMethodExecution, anyNonPrivateMethodExecution
  93. public void perrorCode() throws Exception {
  94. int i = publicStaticInt; // CW anyPublicFieldGet, anyNonPrivateFieldGet
  95. i = publicInt; // CW anyPublicFieldGet, anyNonPrivateFieldGet
  96. i = privateStaticInt;
  97. i = privateInt;
  98. i = defaultStaticInt; // CW anyNonPrivateFieldGet
  99. i = defaultInt; // CW anyNonPrivateFieldGet
  100. publicStaticInt = 1; // CW anyPublicFieldSet, anyNonPrivateFieldSet
  101. publicInt = 1; // CW anyPublicFieldSet, anyNonPrivateFieldSet
  102. // for these 4: CW anyNonPublicFieldSetOutsideConstructorOrSetter
  103. privateStaticInt = 1;
  104. privateInt = 1;
  105. defaultStaticInt = 1; // CW anyNonPrivateFieldSet
  106. defaultInt = 1; // CW anyNonPrivateFieldSet
  107. System.out.println(""); // CW anyGetSystemErrOut, anyNonPrivateFieldGet, anyPublicFieldGet, anyJavaIOCalls
  108. System.err.println(""); // CW anyGetSystemErrOut, anyNonPrivateFieldGet anyPublicFieldGet, anyJavaIOCalls
  109. new Thread((Runnable)null); // CW anyThreadConstruction, anyConstructorExecution, anyNonPrivateConstructorExecution
  110. FileReader fr = new FileReader("none"); // CW anyJavaIOCalls
  111. i = fr.read(); // CW anyJavaIOCalls
  112. DefaultListModel model = new DefaultListModel(); // CW anyJavaAWTOrSwingCalls
  113. model.addElement(null); // CW anyJavaAWTOrSwingCalls
  114. Button button = new Button(); // CW anyJavaAWTOrSwingCalls
  115. button.addActionListener(null); // CW anyJavaAWTOrSwingCalls
  116. String myName = PointcutsCW.class.getName(); // CW anySystemClassLoadingCalls, mostThrowableReadCalls b/c of in-bytecode conversion from ClassNotFoundException to NoClassDefFoundError
  117. Class me = Class.forName(myName); // CW anySystemClassLoadingCalls
  118. Method m = me.getDeclaredMethod("notFound", new Class[]{}); // CW anySystemReflectiveCalls
  119. Process p = Runtime.getRuntime().exec("ls"); // CW anySystemProcessSpawningCalls
  120. Error e = new Error("hello");
  121. e.getMessage(); // CW mostThrowableReadCalls
  122. e.printStackTrace(); // CW mostThrowableReadCalls
  123. e.getClass(); // not mostThrowableReadCalls b/c getClass() is Object
  124. List list = new ArrayList();
  125. list.add("one"); // CW anyCollectionWriteCalls
  126. // actually not writing, but staticly might
  127. list.remove("two"); // CW anyCollectionWriteCalls
  128. list.removeAll(Collections.EMPTY_LIST); // CW anyCollectionWriteCalls, anyPublicFieldGet, anyNonPrivateFieldGet
  129. list.retainAll(list); // CW anyCollectionWriteCalls
  130. }
  131. }
  132. aspect DynamicTests {
  133. DynamicTests() {
  134. int i = 1; // CW anyConstructorExecution, anyNonPrivateConstructorExecution XXX shows as 190, not 189?
  135. }
  136. static {
  137. Tester.expectEvent("mainExecution");
  138. Tester.expectEvent("cflowMainExecution");
  139. Tester.expectEvent("adviceCflow");
  140. Tester.expectEvent("notInAdviceCflow");
  141. }
  142. after(MemberTests memberTests) returning : target(memberTests)
  143. && Pointcuts.cflowMainExecution() && call(String toString())
  144. && !within(DynamicTests) {
  145. String targ = memberTests.toString();
  146. Tester.event("cflowMainExecution");
  147. Tester.event("adviceCflow");
  148. }
  149. after() returning : target(MemberTests)
  150. && Pointcuts.notInAdviceCflow() && call(String toString()) {
  151. Tester.event("notInAdviceCflow"); // should only get one of these
  152. }
  153. after() returning : within(PointcutsCW) && Pointcuts.mainExecution() {
  154. Tester.event("mainExecution"); // also cflowMainExecution
  155. Tester.checkAllEvents();
  156. }
  157. }
  158. /*
  159. grep -n " CW" PointcutsCW.java \
  160. | sed 's|^\(.*\)\:.*\/\/*CW \(.*\)$|<message kind="warning" line="\1" text="\2"/>|' \
  161. > messages.txt
  162. */