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.

RestrictingVisibilityCF.java 2.3KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import org.aspectj.testing.Tester;
  2. /** @testcase PR#536 expecting compile failures with subclass narrowing scope of superclass methods or accessing private superclass variables */
  3. public class RestrictingVisibilityCF {
  4. public static void main(String[] args) {
  5. Tester.check(false, "compile should fail");
  6. }
  7. }
  8. class Parent {
  9. public int publicAccess;
  10. protected int protectedAccess;
  11. int defaultAccess;
  12. private int privateAccess;
  13. public void publicAccess() {}
  14. protected void protectedAccess() {}
  15. void defaultAccess() {}
  16. private void privateAccess() {}
  17. void drivePrivateAccess() {
  18. privateAccess();
  19. }
  20. }
  21. class InValidChild extends Parent {
  22. /** @testcase subclass private implementation of public method */
  23. private void publicAccess() { } // errLine 27
  24. /** @testcase subclass private implementation of method with default access */
  25. private void defaultAccess() { } // errLine 29
  26. /** @testcase subclass private implementation of protected method */
  27. private void protectedAccess() { } // errLine 31
  28. // todo: sep package, attempt package acces
  29. int defaultAccessSub = defaultAccess;
  30. }
  31. class InValidChild2 extends Parent {
  32. /** @testcase subclass private implementation of method with default access */
  33. private void defaultAccess() { } // errLine 39
  34. /** @testcase subclass protected implementation of public method */
  35. protected void publicAccess() { } // errLine 41
  36. }
  37. class InValidChild3 extends Parent {
  38. /** @testcase subclass default implementation of method with protected access */
  39. void protectedAccess() { } // errLine 46
  40. /** @testcase subclass default implementation of public method */
  41. void publicAccess() { } // errLine 48
  42. }
  43. class InValidChild4 extends Parent {
  44. /** @testcase private access members unavailable in subclass */
  45. private int foo = new Parent().privateAccess; // errLine 53
  46. }
  47. // /** todo: separate package test */
  48. // class Invalid {
  49. // /** @testcase default access members unavailable from separate package */
  50. // private int bar = new Parent().defaultAccess;
  51. // /** @testcase protected access members unavailable from separate package */
  52. // private int foo = new Parent().protectedAccess;
  53. // }