mirror of
https://github.com/eclipse-aspectj/aspectj.git
synced 2024-09-13 15:45:38 +02:00
212 lines
8.4 KiB
Java
212 lines
8.4 KiB
Java
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())"
|
|
|
|
};
|
|
}
|