duke@1: /** duke@1: * @test /nodynamiccopyright/ duke@1: * @bug 4094658 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@611: * @compile/fail/ref=QualifiedAccess_3.out -XDrawDiagnostics QualifiedAccess_3.java duke@1: */ duke@1: duke@1: import pack1.P1; duke@1: duke@1: class CMain { duke@1: duke@1: class Foo { duke@1: class Bar {} duke@1: } duke@1: duke@1: static class Baz { duke@1: private static class Quux { duke@1: static class Quem {} duke@1: } duke@1: } duke@1: duke@1: // These are all OK. duke@1: CMain z = new CMain(); duke@1: Foo x = z.new Foo(); duke@1: Foo.Bar y = x.new Bar(); duke@1: duke@1: void test() { duke@1: P1 p1 = new P1(); duke@1: duke@1: // These are NOT errors, and should NOT be detected, as observed. duke@1: /*------------------------------------* duke@1: Baz.Quux z = null; duke@1: Baz.Quux.Quem y = null; duke@1: *------------------------------------*/ duke@1: duke@1: P1.Foo.Bar x = null; // ERROR - 'P1.Foo' not accessible duke@1: int i = p1.a.length; // ERROR - Type of 'a' not accessible duke@1: // The type of the expression from which a component duke@1: // is selected must be accessible. duke@1: p1.p2.privatei = 3; // ERROR - Type of 'p1.p2' not accessible. duke@1: System.out.println (p1.p2.privatei); // ERROR - Type of 'p1.p2' not accessible. duke@1: } duke@1: duke@1: }