|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
-
- import org.aspectj.testing.Tester;
-
- public class SuperInIntroduction {
- public static void main (String[] args) {
- int result = new Sub().getInt();
- Tester.check(8==result, "new Sub().getInt() !8==" + result);
- ObjectSub sb = new ObjectSub().getClone();
- Tester.check(null != sb, "null new ObjectSub().getClone()");
- sb = new ObjectSub().getSuperClone();
- Tester.check(null != sb, "null new ObjectSub().getSuperClone()");
- }
- }
-
- class Super {
- protected int protectedInt = 1;
- protected int protectedIntMethod() { return protectedInt; }
- int defaultInt = 1;
- int defaultIntMethod() { return defaultInt; }
- }
-
- class Sub extends Super { }
- class ObjectSub { }
-
- aspect A {
- /** @testcase accessing protected method and field of class within code the compiler controls */
- public int Sub.getInt() {
- int result;
- result = super.protectedInt;
- result += super.protectedIntMethod();
- result += protectedInt;
- result += protectedIntMethod();
- result += defaultInt;
- result += defaultIntMethod();
- result += super.defaultInt;
- result += super.defaultIntMethod();
- return result;
- }
-
- /** @testcase accessing protected method of class outside code the compiler controls */
- public ObjectSub ObjectSub.getClone() {
- try {
- Object result = clone();
- return (ObjectSub) result;
- } catch (CloneNotSupportedException e) {
- return this;
- }
- }
-
- /** @testcase using super to access protected method of class outside code the compiler controls */
- public ObjectSub ObjectSub.getSuperClone() {
- ObjectSub result = null;
- try {
- result = (ObjectSub) super.clone();
- Tester.check(false, "expecting CloneNotSupportedException");
- } catch (CloneNotSupportedException e) {
- result = this; // bad programming - ok for testing
- }
- return result;
- }
- }
|