duke@1: /** duke@1: * @test /nodynamiccopyright/ duke@1: * @bug 4094658 4277300 4785453 duke@1: * @summary Test enforcement of JLS 6.6.1 and 6.6.2 rules requiring that duke@1: * the type to which a component member belongs be accessible in qualified duke@1: * names. duke@1: * jjg@69: * @compile pack1/P1.java jjg@69: * @compile pack1/P2.java jjg@611: * @compile/fail/ref=QualifiedAccess_2.out -XDrawDiagnostics QualifiedAccess_2.java duke@1: */ duke@1: duke@1: import pack1.P1; duke@1: duke@1: class A { duke@1: private static class B { duke@1: static class Inner {} duke@1: } duke@1: } duke@1: duke@1: class X extends pack1.P1 { duke@1: X() { super("bar"); } duke@1: void foo() { duke@1: /*-----------------* duke@1: // BOGUS: Reports matching constructor not found. duke@1: // OK if 'Q' is made a public constructor. duke@1: Object y = new Q("foo");// ERROR - protected constructor Q inaccessible duke@1: *------------------*/ duke@1: // Reports 'P1.R.S' not found at all. (private) duke@1: Object z = new R.S.T(); // ERROR - S is inaccessible duke@1: } duke@1: } duke@1: duke@1: class Y { duke@1: duke@1: class Foo { duke@1: class Bar {} duke@1: } duke@1: duke@1: class C extends A.B {} // ERROR - B is inaccessible duke@1: class D extends A.B.Inner {} // ERROR - B is inaccessible duke@1: duke@1: static class Quux { duke@1: private static class Quem { duke@1: P1.Foo.Bar x; // ERROR - Foo is inaccessible duke@1: static class MyError extends Error {} duke@1: } duke@1: } duke@1: } duke@1: duke@1: class Z { duke@1: void foo() throws Y.Quux.Quem.MyError { duke@1: // ERROR - type of Quux not accesible (private) duke@1: throw new Y.Quux.Quem.MyError(); duke@1: // ERROR - type of Quux not accesible (private) duke@1: } duke@1: }