diff options
author | wisberg <wisberg> | 2002-12-16 18:51:06 +0000 |
---|---|---|
committer | wisberg <wisberg> | 2002-12-16 18:51:06 +0000 |
commit | 144143c2970a1e874d74cdbd0f8c622d4282a3c3 (patch) | |
tree | b12383d3d9e76c7e1f25f7fbec83051ef17f81fb /tests/new/RestrictingVisibilityCP.java | |
parent | fafae443719b26159ab2d7dac1c9b46b5e00b671 (diff) | |
download | aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.tar.gz aspectj-144143c2970a1e874d74cdbd0f8c622d4282a3c3.zip |
initial version
Diffstat (limited to 'tests/new/RestrictingVisibilityCP.java')
-rw-r--r-- | tests/new/RestrictingVisibilityCP.java | 211 |
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())" + + }; +} |