0N/A/*
0N/A * @test /nodynamiccopyright/
0N/A * @bug 4087314 4087314 4785453
0N/A * @summary Test access checking within 'extends' and 'implements' clause.
0N/A * @author William Maddox (maddox)
610N/A * @compile/fail/ref=ExtendsAccess.out -XDrawDiagnostics ExtendsAccess.java
0N/A */
0N/A
0N/A/*
0N/A * Should compile with errors as noted.
0N/A */
0N/A
0N/Aclass ExtendsAccess {
0N/A
0N/A class defaultClass { }
0N/A public class publicClass { }
0N/A private class privateClass { }
0N/A protected class protectedClass { }
0N/A
0N/A static class defaultStaticClass { }
0N/A public static class publicStaticClass { }
0N/A private static class privateStaticClass { }
0N/A protected static class protectedStaticClass { }
0N/A
0N/A interface defaultInterface { }
0N/A public interface publicInterface { }
0N/A private interface privateInterface { }
0N/A protected interface protectedInterface { }
0N/A}
0N/A
0N/Aclass ExtendsAccess111 extends publicClass { } // ERROR - 'publicClass' not in scope
0N/Aclass ExtendsAccess112 extends defaultClass { } // ERROR - 'defaultClass' not in scope
0N/Aclass ExtendsAccess113 extends protectedClass { } // ERROR - 'protectedClass' not in scope
0N/Aclass ExtendsAccess114 extends privateClass { } // ERROR - 'privateClass' not in scope
0N/A
0N/Aclass ExtendsAccess1211 extends ExtendsAccess.publicClass { } // OK - can extend inner classes (was ERROR - no enclosing instance)
0N/Aclass ExtendsAccess1221 extends ExtendsAccess.defaultClass { } // OK - can extend inner classes (was ERROR - no enclosing instance)
0N/Aclass ExtendsAccess1231 extends ExtendsAccess.protectedClass { } // OK - can extend inner classes (was ERROR - no enclosing instance)
0N/Aclass ExtendsAccess1241 extends ExtendsAccess.privateClass { } // ERROR - cannot access 'privateClass'
0N/A
0N/Aclass ExtendsAccess1212 extends p.ExtendsAccess.publicClass { } // OK - can extend inner classes (was ERROR - no enclosing instance)
0N/Aclass ExtendsAccess1222 extends p.ExtendsAccess.defaultClass { } // ERROR - cannot access 'defaultClass'
0N/Aclass ExtendsAccess1232 extends p.ExtendsAccess.protectedClass { } // ERROR - cannot access 'protectedClass'
0N/Aclass ExtendsAccess1242 extends p.ExtendsAccess.privateClass { } // ERROR - cannot access 'privateClass'
0N/A
0N/Aclass ExtendsAccess1311 extends ExtendsAccess {
0N/A class N extends publicClass { }
0N/A}
0N/Aclass ExtendsAccess1321 extends ExtendsAccess {
0N/A class N extends defaultClass { }
0N/A}
0N/Aclass ExtendsAccess1331 extends ExtendsAccess {
0N/A class N extends protectedClass { }
0N/A}
0N/Aclass ExtendsAccess1341 extends ExtendsAccess {
0N/A class N extends privateClass { } // ERROR - cannot access 'privateClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess1312 extends p.ExtendsAccess {
0N/A class N extends publicClass { }
0N/A}
0N/Aclass ExtendsAccess1322 extends p.ExtendsAccess {
0N/A class N extends defaultClass { } // ERROR - cannot access 'defaultClass'
0N/A}
0N/Aclass ExtendsAccess1332 extends p.ExtendsAccess {
0N/A class N extends protectedClass { }
0N/A}
0N/Aclass ExtendsAccess1342 extends p.ExtendsAccess {
0N/A class N extends privateClass { } // ERROR - cannot access 'privateClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess1411 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.publicClass { }
0N/A}
0N/Aclass ExtendsAccess1421 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.defaultClass { }
0N/A}
0N/Aclass ExtendsAccess1431 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.protectedClass { }
0N/A}
0N/Aclass ExtendsAccess1441 extends ExtendsAccess {
0N/A class N extends ExtendsAccess1441.protectedClass { }
0N/A}
0N/Aclass ExtendsAccess1451 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.privateClass { } // ERROR - cannot access 'privateClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess1412 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.publicClass { }
0N/A}
0N/Aclass ExtendsAccess1422 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.defaultClass { } // ERROR - cannot access 'defaultClass'
0N/A}
0N/Aclass ExtendsAccess1432 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.protectedClass { } // OK (was: should be error, see JLS 6.6.2)
0N/A}
0N/Aclass ExtendsAccess1442 extends p.ExtendsAccess {
0N/A class N extends ExtendsAccess1442.protectedClass { }
0N/A}
0N/Aclass ExtendsAccess1452 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.privateClass { } // ERROR - cannot access 'privateClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess211 extends publicStaticClass { } // ERROR - 'publicStaticClass' not in scope
0N/Aclass ExtendsAccess212 extends defaultStaticClass { } // ERROR - 'defaultStaticClass' not in scope
0N/Aclass ExtendsAccess213 extends protectedStaticClass { } // ERROR - 'protectedStaticClass' not in scope
0N/Aclass ExtendsAccess214 extends privateStaticClass { } // ERROR - 'privateStaticClass' not in scope
0N/A
0N/Aclass ExtendsAccess2211 extends ExtendsAccess.publicStaticClass { }
0N/Aclass ExtendsAccess2221 extends ExtendsAccess.defaultStaticClass { }
0N/Aclass ExtendsAccess2231 extends ExtendsAccess.protectedStaticClass { }
0N/Aclass ExtendsAccess2241 extends ExtendsAccess.privateStaticClass { } // ERROR - cannot access 'privateStaticClass'
0N/A
0N/Aclass ExtendsAccess2212 extends p.ExtendsAccess.publicStaticClass { }
0N/Aclass ExtendsAccess2222 extends p.ExtendsAccess.defaultStaticClass { } // ERROR - cannot access 'defaultStaticClass'
0N/Aclass ExtendsAccess2232 extends p.ExtendsAccess.protectedStaticClass { }// ERROR - cannot access 'protectedStaticClass'
0N/Aclass ExtendsAccess2242 extends p.ExtendsAccess.privateStaticClass { } // ERROR - cannot access 'privateStaticClass'
0N/A
0N/Aclass ExtendsAccess2311 extends ExtendsAccess {
0N/A class N extends publicStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2321 extends ExtendsAccess {
0N/A class N extends defaultStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2331 extends ExtendsAccess {
0N/A class N extends protectedStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2341 extends ExtendsAccess {
0N/A class N extends privateStaticClass { } // ERROR - cannot access 'privateStaticClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess2312 extends p.ExtendsAccess {
0N/A class N extends publicStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2322 extends p.ExtendsAccess {
0N/A class N extends defaultStaticClass { } // ERROR - cannot access 'defaultStaticClass'
0N/A}
0N/Aclass ExtendsAccess2332 extends p.ExtendsAccess {
0N/A class N extends protectedStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2342 extends p.ExtendsAccess {
0N/A class N extends privateStaticClass { } // ERROR - cannot access 'privateStaticClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess2411 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.publicStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2421 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.defaultStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2431 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.protectedStaticClass { } // OK (was should be error, see JLS 6.6.2)
0N/A}
0N/Aclass ExtendsAccess2441 extends ExtendsAccess {
0N/A class N extends ExtendsAccess2431.protectedStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2451 extends ExtendsAccess {
0N/A class N extends ExtendsAccess.privateStaticClass { } // ERROR - cannot access 'privateStaticClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess2412 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.publicStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2422 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.defaultStaticClass { } // ERROR - cannot access 'defaultStaticClass'
0N/A}
0N/Aclass ExtendsAccess2432 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.protectedStaticClass { } // OK (was: should be error, see JLS 6.6.2)
0N/A}
0N/Aclass ExtendsAccess2442 extends p.ExtendsAccess {
0N/A class N extends ExtendsAccess2442.protectedStaticClass { }
0N/A}
0N/Aclass ExtendsAccess2452 extends p.ExtendsAccess {
0N/A class N extends p.ExtendsAccess.privateStaticClass { } // ERROR - cannot access 'privateStaticClass'
0N/A}
0N/A
0N/Aclass ExtendsAccess311 extends ExtendsAccess implements publicInterface { } // ERROR - 'publicInterface' not in scope
0N/Aclass ExtendsAccess312 extends ExtendsAccess implements defaultInterface { } // ERROR - 'defaultInterface' not in scope
0N/Aclass ExtendsAccess313 extends ExtendsAccess implements protectedInterface { } // ERROR - 'protectedInterface' not in scope
0N/Aclass ExtendsAccess314 extends ExtendsAccess implements privateInterface { } // ERROR - 'privateInterface' not in scope
0N/A
0N/Aclass ExtendsAccess3211 extends ExtendsAccess implements ExtendsAccess.publicInterface { }
0N/Aclass ExtendsAccess3221 extends ExtendsAccess implements ExtendsAccess.defaultInterface { }
0N/Aclass ExtendsAccess3231 extends ExtendsAccess implements ExtendsAccess.protectedInterface { }
0N/Aclass ExtendsAccess3241 extends ExtendsAccess
0N/A implements ExtendsAccess.privateInterface { } // ERROR - cannot access 'privateInterface'
0N/A
0N/Aclass ExtendsAccess3212 extends ExtendsAccess
0N/A implements p.ExtendsAccess.publicInterface { }
0N/Aclass ExtendsAccess3222 extends ExtendsAccess
0N/A implements p.ExtendsAccess.defaultInterface { } // ERROR - cannot access 'defaultStaticClass'
0N/Aclass ExtendsAccess3232 extends ExtendsAccess
0N/A implements p.ExtendsAccess.protectedInterface { } // ERROR - cannot access 'protectedStaticClass'
0N/Aclass ExtendsAccess3242 extends ExtendsAccess
0N/A implements p.ExtendsAccess.privateInterface { } // ERROR - cannot access 'privateInterface'
0N/A
0N/Aclass ExtendsAccess331 extends ExtendsAccess {
0N/A class N implements publicInterface { }
0N/A}
0N/Aclass ExtendsAccess3321 extends ExtendsAccess {
0N/A class N implements defaultInterface { }
0N/A}
0N/Aclass ExtendsAccess3331 extends ExtendsAccess {
0N/A class N implements protectedInterface { }
0N/A}
0N/Aclass ExtendsAccess3341 extends ExtendsAccess {
0N/A class N implements privateInterface { } // ERROR - cannot access 'privateInterface'
0N/A}
0N/A
0N/Aclass ExtendsAccess3312 extends p.ExtendsAccess {
0N/A class N implements publicInterface { }
0N/A}
0N/Aclass ExtendsAccess3322 extends p.ExtendsAccess {
0N/A class N implements defaultInterface { } // ERROR - cannot access 'defaultStaticClass'
0N/A}
0N/Aclass ExtendsAccess3332 extends p.ExtendsAccess {
0N/A class N implements protectedInterface { }
0N/A}
0N/Aclass ExtendsAccess3342 extends p.ExtendsAccess {
0N/A class N implements privateInterface { } // ERROR - cannot access 'privateInterface'
0N/A}
0N/A
0N/Aclass ExtendsAccess341 extends ExtendsAccess {
0N/A class N implements ExtendsAccess.publicInterface { }
0N/A}
0N/Aclass ExtendsAccess3421 extends ExtendsAccess {
0N/A class N implements ExtendsAccess.defaultInterface { }
0N/A}
0N/Aclass ExtendsAccess3431 extends ExtendsAccess {
0N/A class N implements ExtendsAccess.protectedInterface { } // OK (was: should be error, see JLS 6.2.2)
0N/A}
0N/Aclass ExtendsAccess3441 extends ExtendsAccess {
0N/A class N implements ExtendsAccess3441.protectedInterface { }
0N/A}
0N/Aclass ExtendsAccess3451 extends ExtendsAccess {
0N/A class N implements ExtendsAccess.privateInterface { } // ERROR - cannot access 'privateInterface'
0N/A}
0N/A
0N/Aclass ExtendsAccess342 extends p.ExtendsAccess {
0N/A class N implements p.ExtendsAccess.publicInterface { }
0N/A}
0N/Aclass ExtendsAccess3422 extends p.ExtendsAccess {
0N/A class N implements p.ExtendsAccess.defaultInterface { } // ERROR - cannot access 'defaultClass'
0N/A}
0N/Aclass ExtendsAccess3432 extends p.ExtendsAccess {
0N/A class N implements p.ExtendsAccess.protectedInterface { } // OK (was: should be error, see JLS 6.2.2)
0N/A}
0N/Aclass ExtendsAccess3442 extends p.ExtendsAccess {
0N/A class N implements ExtendsAccess3442.protectedInterface { }
0N/A}
0N/Aclass ExtendsAccess3452 extends p.ExtendsAccess {
0N/A class N implements p.ExtendsAccess.privateInterface { } // ERROR - cannot access 'privateInterface'
0N/A}