QualifiedAccess_1.java revision 610:4172cfff05f0
1/**
2 * @test  /nodynamiccopyright/
3 * @bug 4094658 4277296 4785453
4 * @summary Test enforcement of JLS 6.6.1 and 6.6.2 rules requiring that
5 * the type to which a component member belongs be accessible in qualified
6 * names.
7 *
8 * @compile pack1/P1.java
9 * @compile pack1/P2.java
10 * @compile/fail/ref=QualifiedAccess_1.out -XDrawDiagnostics QualifiedAccess_1.java
11 */
12
13import pack1.P1;
14
15public class QualifiedAccess_1 {
16
17    // Inaccessible types in member declarations.
18    // These exercise 'Env.resolve'.
19    // Errors are localized poorly.
20    //
21    // Fields 'P3' and 'P5' are inaccessible.
22
23    P1 foo;
24    P1.P3 bar;                                  // ERROR
25    P1.P3.P4 baz;                               // ERROR
26    P1.P3.P4.P5 quux;                           // ERROR
27
28    P1 m11() {return null;}
29    P1.P3 m12() {return null;}                  // ERROR
30    P1.P3.P4 m13() {return null;}               // ERROR
31    P1.P3.P4.P5 m14() {return null;}            // ERROR
32
33    void m21(P1 x) {}
34    void m22(P1.P3 x) {}                        // ERROR
35    void m23(P1.P3.P4 x) {}                     // ERROR
36    void m24(P1.P3.P4.P5 x) {}                  // ERROR
37
38    void test1() {
39
40        // Inaccessible types in local variable declarations.
41        // These exercise 'FieldExpression.checkCommon'.
42        //
43        // Fields 'P3' and 'P5' are inaccessible.
44
45        P1 foo = null;
46        P1.P3 bar = null;                       // ERROR
47        P1.P3.P4 baz = null;                    // ERROR
48        P1.P3.P4.P5 quux = null;                // ERROR
49    }
50
51    void test2() {
52
53        // Inaccessible types in casts.
54        // These exercise 'FieldExpression.checkCommon'.
55        //
56        // Fields 'P3' and 'P5' are inaccessible.
57
58        Object foo = (P1)null;
59        Object bar = (P1.P3)null;               // ERROR
60        Object baz = (P1.P3.P4)null;            // ERROR
61        Object quux = (P1.P3.P4.P5)null;        // ERROR
62    }
63
64    void test3() {
65
66        // Inaccessible types in 'instanceof' expressions.
67        // These exercise 'FieldExpression.checkCommon'.
68        //
69        // Fields 'P3' and 'P5' are inaccessible.
70
71        boolean foo = null instanceof P1;
72        boolean bar = null instanceof P1.P3;            // ERROR
73        boolean baz = null instanceof P1.P3.P4;         // ERROR
74        boolean quux = null instanceof P1.P3.P4.P5;     // ERROR
75    }
76
77}
78