| /** |
| * @test /nodynamiccopyright/ |
| * @bug 4094658 4277296 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_1.out -XDrawDiagnostics QualifiedAccess_1.java |
| */ |
| |
| import pack1.P1; |
| |
| public class QualifiedAccess_1 { |
| |
| // Inaccessible types in member declarations. |
| // These exercise 'Env.resolve'. |
| // Errors are localized poorly. |
| // |
| // Fields 'P3' and 'P5' are inaccessible. |
| |
| P1 foo; |
| P1.P3 bar; // ERROR |
| P1.P3.P4 baz; // ERROR |
| P1.P3.P4.P5 quux; // ERROR |
| |
| P1 m11() {return null;} |
| P1.P3 m12() {return null;} // ERROR |
| P1.P3.P4 m13() {return null;} // ERROR |
| P1.P3.P4.P5 m14() {return null;} // ERROR |
| |
| void m21(P1 x) {} |
| void m22(P1.P3 x) {} // ERROR |
| void m23(P1.P3.P4 x) {} // ERROR |
| void m24(P1.P3.P4.P5 x) {} // ERROR |
| |
| void test1() { |
| |
| // Inaccessible types in local variable declarations. |
| // These exercise 'FieldExpression.checkCommon'. |
| // |
| // Fields 'P3' and 'P5' are inaccessible. |
| |
| P1 foo = null; |
| P1.P3 bar = null; // ERROR |
| P1.P3.P4 baz = null; // ERROR |
| P1.P3.P4.P5 quux = null; // ERROR |
| } |
| |
| void test2() { |
| |
| // Inaccessible types in casts. |
| // These exercise 'FieldExpression.checkCommon'. |
| // |
| // Fields 'P3' and 'P5' are inaccessible. |
| |
| Object foo = (P1)null; |
| Object bar = (P1.P3)null; // ERROR |
| Object baz = (P1.P3.P4)null; // ERROR |
| Object quux = (P1.P3.P4.P5)null; // ERROR |
| } |
| |
| void test3() { |
| |
| // Inaccessible types in 'instanceof' expressions. |
| // These exercise 'FieldExpression.checkCommon'. |
| // |
| // Fields 'P3' and 'P5' are inaccessible. |
| |
| boolean foo = null instanceof P1; |
| boolean bar = null instanceof P1.P3; // ERROR |
| boolean baz = null instanceof P1.P3.P4; // ERROR |
| boolean quux = null instanceof P1.P3.P4.P5; // ERROR |
| } |
| |
| } |