aboutsummaryrefslogtreecommitdiffstats
path: root/tests/new/RestrictingVisibilityCP.java
diff options
context:
space:
mode:
authorwisberg <wisberg>2002-12-16 18:51:06 +0000
committerwisberg <wisberg>2002-12-16 18:51:06 +0000
commit144143c2970a1e874d74cdbd0f8c622d4282a3c3 (patch)
treeb12383d3d9e76c7e1f25f7fbec83051ef17f81fb /tests/new/RestrictingVisibilityCP.java
parentfafae443719b26159ab2d7dac1c9b46b5e00b671 (diff)
downloadaspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.tar.gz
aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.zip
initial version
Diffstat (limited to 'tests/new/RestrictingVisibilityCP.java')
-rw-r--r--tests/new/RestrictingVisibilityCP.java211
1 files changed, 211 insertions, 0 deletions
diff --git a/tests/new/RestrictingVisibilityCP.java b/tests/new/RestrictingVisibilityCP.java
new file mode 100644
index 000000000..0b9641fac
--- /dev/null
+++ b/tests/new/RestrictingVisibilityCP.java
@@ -0,0 +1,211 @@
+import org.aspectj.testing.Tester;
+
+/** @testcase PR#536 overriding subclass method may be protected when superclass method has default access */
+public class RestrictingVisibilityCP {
+ public static void main(String[] args) {
+ Tester.expectEventsInString(Const.EXPECTED);
+ Parent[] tests = new Parent[]
+ { new Parent()
+ , new ValidChild()
+ , new ValidChild2()
+ , new ValidChild3()
+ , new ValidChildTest()
+ , new ValidChildTest2()
+ , new ValidChildTest3()
+ };
+ Parent child;
+ for (int i = 0; i< tests.length;i++) {
+ child = tests[i];
+ Tester.event(child.getClass().getName());
+ //System.err.println(", \"" + child.getClass().getName() + "\"");
+ child.publicAccess();
+ child.defaultAccess();
+ child.protectedAccess();
+ child.drivePrivateAccess();
+ }
+ Tester.checkAllEvents();
+ }
+}
+/** aspect used to log progess - test case otherwise purejava */
+aspect LogAll {
+ before() : within(Parent+) && execution(* *(..)) {
+ String name = thisJoinPointStaticPart.toString();
+ Tester.event(name);
+ // System.err.println(", \"" + name + "\"");
+ }
+}
+class Parent {
+ public int publicAccess = 1;
+ protected int protectedAccess = 1;
+ int defaultAccess = 1;
+ private int privateAccess = 1;
+
+ public void publicAccess() {}
+ protected void protectedAccess() {}
+ void defaultAccess() {}
+ private void privateAccess() {}
+ void drivePrivateAccess() {
+ privateAccess();
+ }
+}
+
+class ValidChild extends Parent {
+
+ /** @testcase subclass public implementation of public method */
+ public void publicAccess() { super.publicAccess(); }
+ /** @testcase subclass protected implementation of protected method */
+ protected void protectedAccess() { super.protectedAccess(); }
+ /** @testcase subclass default implementation of default method */
+ void defaultAccess() { super.defaultAccess(); }
+ /** @testcase subclass implementation of private method - not overriding */
+ private void privateAccess() { }
+ void drivePrivateAccess() {
+ privateAccess();
+ super.drivePrivateAccess();
+ }
+
+ int publicAccessSub = publicAccess;
+ int protectedAccessSub = protectedAccess;
+ int defaultAccessSub = defaultAccess;
+}
+
+class ValidChild2 extends Parent {
+ /** @testcase subclass public implementation of protected method */
+ public void protectedAccess() { super.protectedAccess(); }
+ /** @testcase subclass public implementation of default method */
+ public void defaultAccess() { super.defaultAccess(); }
+}
+
+class ValidChild3 extends Parent {
+ /** @testcase subclass protected implementation of default method */
+ // todo: restore to restore ce
+ protected void defaultAccess() { super.defaultAccess(); }
+}
+
+class ValidChildTest extends ValidChild {
+ /** @testcase subsubclass public implementation of public method */
+ public void publicAccess() { super.publicAccess(); }
+ /** @testcase subsubclass protected implementation of protected method */
+ protected void protectedAccess() { super.protectedAccess(); }
+ /** @testcase subsubclass default implementation of default method */
+ void defaultAccess() { super.defaultAccess(); }
+ /** @testcase subsubclass implementation of private method - not overriding */
+ private void privateAccess() { }
+ void drivePrivateAccess() {
+ privateAccess();
+ super.drivePrivateAccess();
+ }
+}
+class ValidChildTest2 extends ValidChild {
+ /** @testcase subsubclass public implementation of protected method */
+ public void protectedAccess() { super.protectedAccess(); }
+ /** @testcase subsubclass public implementation of default method */
+ public void defaultAccess() { super.defaultAccess(); }
+}
+class ValidChildTest3 extends ValidChild {
+ /** @testcase PR#536 subsubclass protected implementation of default method */
+ // todo protected void defaultAccess() { super.defaultAccess(); }
+}
+class ValidChild5 extends Parent {
+ int one = publicAccess;
+ int two = protectedAccess;
+ int three = defaultAccess;
+}
+class ValidClass {
+ static int[] ra;
+ static {
+ ra = new int[]
+ { (new Parent()).publicAccess
+ , (new ValidChild()).publicAccess
+ , (new ValidChildTest()).publicAccess
+ , (new Parent()).defaultAccess
+ , (new ValidChild()).defaultAccess
+ , (new ValidChildTest()).defaultAccess
+ , (new Parent()).protectedAccess
+ , (new ValidChild()).protectedAccess
+ , (new ValidChildTest()).protectedAccess
+ };
+ for (int i = 0; i < ra.length; i++) {
+ Tester.check(1 == ra[i],
+ "expected 1 at " + i + " got i" + ra[i]);
+ }
+ }
+}
+
+class Const {
+ public static final String[] EXPECTED = new String[]
+ { "Parent"
+ , "execution(void Parent.publicAccess())"
+ , "execution(void Parent.defaultAccess())"
+ , "execution(void Parent.protectedAccess())"
+ , "execution(void Parent.drivePrivateAccess())"
+ , "execution(void Parent.privateAccess())"
+ , "ValidChild"
+ , "execution(void ValidChild.publicAccess())"
+ , "execution(void Parent.publicAccess())"
+ , "execution(void ValidChild.defaultAccess())"
+ , "execution(void Parent.defaultAccess())"
+ , "execution(void ValidChild.protectedAccess())"
+ , "execution(void Parent.protectedAccess())"
+ , "execution(void ValidChild.drivePrivateAccess())"
+ , "execution(void ValidChild.privateAccess())"
+ , "execution(void Parent.drivePrivateAccess())"
+ , "execution(void Parent.privateAccess())"
+ , "ValidChild2"
+ , "execution(void Parent.publicAccess())"
+ , "execution(void ValidChild2.defaultAccess())"
+ , "execution(void Parent.defaultAccess())"
+ , "execution(void ValidChild2.protectedAccess())"
+ , "execution(void Parent.protectedAccess())"
+ , "execution(void Parent.drivePrivateAccess())"
+ , "execution(void Parent.privateAccess())"
+ , "ValidChild3"
+ , "execution(void Parent.publicAccess())"
+ , "execution(void ValidChild3.defaultAccess())"
+ , "execution(void Parent.defaultAccess())"
+ , "execution(void Parent.protectedAccess())"
+ , "execution(void Parent.drivePrivateAccess())"
+ , "execution(void Parent.privateAccess())"
+ , "execution(void ValidChildTest.publicAccess())"
+ , "execution(void ValidChild.publicAccess())"
+ , "execution(void Parent.publicAccess())"
+ , "ValidChildTest"
+ , "execution(void ValidChildTest.defaultAccess())"
+ , "execution(void ValidChild.defaultAccess())"
+ , "execution(void Parent.defaultAccess())"
+ , "execution(void ValidChildTest.protectedAccess())"
+ , "execution(void ValidChild.protectedAccess())"
+ , "execution(void Parent.protectedAccess())"
+ , "execution(void ValidChildTest.drivePrivateAccess())"
+ , "execution(void ValidChildTest.privateAccess())"
+ , "execution(void ValidChild.drivePrivateAccess())"
+ , "execution(void ValidChild.privateAccess())"
+ , "execution(void Parent.drivePrivateAccess())"
+ , "execution(void Parent.privateAccess())"
+ , "ValidChildTest2"
+ , "execution(void ValidChild.publicAccess())"
+ , "execution(void Parent.publicAccess())"
+ , "execution(void ValidChildTest2.defaultAccess())"
+ , "execution(void ValidChild.defaultAccess())"
+ , "execution(void Parent.defaultAccess())"
+ , "execution(void ValidChildTest2.protectedAccess())"
+ , "execution(void ValidChild.protectedAccess())"
+ , "execution(void Parent.protectedAccess())"
+ , "execution(void ValidChild.drivePrivateAccess())"
+ , "execution(void ValidChild.privateAccess())"
+ , "execution(void Parent.drivePrivateAccess())"
+ , "execution(void Parent.privateAccess())"
+ , "ValidChildTest3"
+ , "execution(void ValidChild.publicAccess())"
+ , "execution(void Parent.publicAccess())"
+ , "execution(void ValidChild.defaultAccess())"
+ , "execution(void Parent.defaultAccess())"
+ , "execution(void ValidChild.protectedAccess())"
+ , "execution(void Parent.protectedAccess())"
+ , "execution(void ValidChild.drivePrivateAccess())"
+ , "execution(void ValidChild.privateAccess())"
+ , "execution(void Parent.drivePrivateAccess())"
+ , "execution(void Parent.privateAccess())"
+
+ };
+}