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