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