ProtectedMemberAccess4.java revision 610:4172cfff05f0
1/*
2 * @test  /nodynamiccopyright/
3 * @bug 4319507 4785453
4 * @summary Verify correct implementation of JLS2e 6.6.2.1
5 * @author maddox
6 *
7 * @compile/fail/ref=ProtectedMemberAccess4.out -XDdiags=-simpleNames -XDdiagsFormat=%b:%l:%_%m ProtectedMemberAccess4.java
8 */
9
10// 33 errors expected.
11
12import pkg.SuperClass;
13
14class ProtectedMemberAccess4 extends pkg.SuperClass {
15
16  // Access to a protected instance (non-static) field, instance method,
17  // or member type by a qualified name is always legal in a subclass of
18  // the class in which the member is declared.  Such access to a protected
19  // instance field or instance method is allowed only if the qualifying type
20  // or the type of the qualifying expression is (a subclass of) the class
21  // in which the reference occurs.  In this test case, the qualifying type
22  // is a superclass, thus all of the qualified references to instance fields
23  // and instance methods are illegal.
24
25  pkg.SuperClass x = new pkg.SuperClass();
26
27  static pkg.SuperClass sx = new pkg.SuperClass();
28
29  int i = x.pi;                                 // illegal
30  int j = x.spi;                                // ok
31
32  int n = sx.pi;                                // illegal
33  int m = sx.spi;                               // ok
34
35  static int sn = sx.pi;                        // illegal
36  static int sm = sx.spi;                       // ok
37
38  int w = x.pm();                               // illegal
39  int y = x.spm();                              // ok
40
41  int u = sx.pm();                              // illegal
42  int v = sx.spm();                             // ok
43
44  pkg.SuperClass.pC  obj1;                      // ok
45  pkg.SuperClass.spC obj2;                      // ok
46
47  pkg.SuperClass.pI  obj3;                      // ok
48  pkg.SuperClass.spI obj4;                      // ok
49
50  Object o1 = (pkg.SuperClass.pC) null;         // ok
51  Object o2 = (pkg.SuperClass.spC) null;        // ok
52
53  Object o3 = (pkg.SuperClass.pI) null;         // ok
54  Object o4 = (pkg.SuperClass.spI) null;        // ok
55
56  class C1 extends pkg.SuperClass.pC {}         // ok
57  class C2 extends pkg.SuperClass.spC {}        // ok
58
59  interface I1 extends pkg.SuperClass.pI {}     // ok
60  interface I2 extends pkg.SuperClass.spI {}    // ok
61
62  static {
63
64    pkg.SuperClass lx = new pkg.SuperClass();
65
66    sx.pi  = 1;                                 // illegal
67    sx.spi = 2;                                 // ok
68
69    lx.pi  = 1;                                 // illegal
70    lx.spi = 2;                                 // ok
71
72    int n = sx.pi;                              // illegal
73    int m = sx.spi;                             // ok
74
75    int k = lx.pi;                              // illegal
76    int l = lx.spi;                             // ok
77
78    int u = sx.pm();                            // illegal
79    int v = sx.spm();                           // ok
80
81    int w = lx.pm();                            // illegal
82    int z = lx.spm();                           // ok
83
84    pkg.SuperClass.pC  obj1;                    // ok
85    pkg.SuperClass.spC obj2;                    // ok
86
87    pkg.SuperClass.pI  obj3;                    // ok
88    pkg.SuperClass.spI obj4;                    // ok
89
90    Object o1 = (pkg.SuperClass.pC) null;       // ok
91    Object o2 = (pkg.SuperClass.spC) null;      // ok
92
93    Object o3 = (pkg.SuperClass.pI) null;       // ok
94    Object o4 = (pkg.SuperClass.spI) null;      // ok
95
96    //class C1 extends pkg.SuperClass.pC {}
97    class C2 extends pkg.SuperClass.spC {}      // ok
98
99    //interface I1 extends pkg.SuperClass.pI {}
100    //interface I2 extends pkg.SuperClass.spI {}
101
102  }
103
104  void m() {
105
106    pkg.SuperClass lx = new pkg.SuperClass();
107
108    x.pi  = 1;                                  // illegal
109    x.spi = 2;                                  // ok
110
111    sx.pi  = 1;                                 // illegal
112    sx.spi = 2;                                 // ok
113
114    lx.pi  = 1;                                 // illegal
115    lx.spi = 2;                                 // ok
116
117    int t = x.pm();                             // illegal
118    int y = x.spm();                            // ok
119
120    int u = sx.pm();                            // illegal
121    int v = sx.spm();                           // ok
122
123    int w = lx.pm();                            // illegal
124    int z = lx.spm();                           // ok
125
126    int i = x.pi;                               // illegal
127    int j = x.spi;                              // ok
128
129    int n = sx.pi;                              // illegal
130    int m = sx.spi;                             // ok
131
132    int k = lx.pi;                              // illegal
133    int l = lx.spi;                             // ok
134
135    pkg.SuperClass.pC  obj1;                    // ok
136    pkg.SuperClass.spC obj2;                    // ok
137
138    pkg.SuperClass.pI  obj3;                    // ok
139    pkg.SuperClass.spI obj4;                    // ok
140
141    Object o1 = (pkg.SuperClass.pC) null;       // ok
142    Object o2 = (pkg.SuperClass.spC) null;      // ok
143
144    Object o3 = (pkg.SuperClass.pI) null;       // ok
145    Object o4 = (pkg.SuperClass.spI) null;      // ok
146
147    class C1 extends pkg.SuperClass.pC {}       // ok
148    class C2 extends pkg.SuperClass.spC {}      // ok
149
150    //interface I1 extends pkg.SuperClass.pI {}
151    //interface I2 extends pkg.SuperClass.spI {}
152
153  }
154
155  class Inner {
156
157    int i = x.pi;                               // illegal
158    int j = x.spi;                              // ok
159
160    int n = sx.pi;                              // illegal
161    int m = sx.spi;                             // ok
162
163    //static int sn = sx.pi;
164    //static int sm = sx.spi;
165
166    int w = x.pm();                             // illegal
167    int y = x.spm();                            // ok
168
169    int u = sx.pm();                            // illegal
170    int v = sx.spm();                           // ok
171
172    pkg.SuperClass.pC  obj1;                    // ok
173    pkg.SuperClass.spC obj2;                    // ok
174
175    pkg.SuperClass.pI  obj3;                    // ok
176    pkg.SuperClass.spI obj4;                    // ok
177
178    Object o1 = (pkg.SuperClass.pC) null;       // ok
179    Object o2 = (pkg.SuperClass.spC) null;      // ok
180
181    Object o3 = (pkg.SuperClass.pI) null;       // ok
182    Object o4 = (pkg.SuperClass.spI) null;      // ok
183
184    class C1 extends pkg.SuperClass.pC {}       // ok
185    class C2 extends pkg.SuperClass.spC {}      // ok
186
187    //interface I1 extends pkg.SuperClass.pI {}
188    //interface I2 extends pkg.SuperClass.spI {}
189
190    // Not allowed in inner classes.
191    // static { ... }
192
193    void m() {
194
195      pkg.SuperClass lx = new pkg.SuperClass();
196
197      x.pi  = 1;                                // illegal
198      x.spi = 2;                                // ok
199
200      sx.pi  = 1;                               // illegal
201      sx.spi = 2;                               // ok
202
203      lx.pi  = 1;                               // illegal
204      lx.spi = 2;                               // ok
205
206      int t = x.pm();                           // illegal
207      int y = x.spm();                          // ok
208
209      int u = sx.pm();                          // illegal
210      int v = sx.spm();                         // ok
211
212      int w = lx.pm();                          // illegal
213      int z = lx.spm();                         // ok
214
215      int i = x.pi;                             // illegal
216      int j = x.spi;                            // ok
217
218      int n = sx.pi;                            // illegal
219      int m = sx.spi;                           // ok
220
221      int k = lx.pi;                            // illegal
222      int l = lx.spi;                           // ok
223
224      pkg.SuperClass.pC  obj1;                  // ok
225      pkg.SuperClass.spC obj2;                  // ok
226
227      pkg.SuperClass.pI  obj3;                  // ok
228      pkg.SuperClass.spI obj4;                  // ok
229
230      Object o1 = (pkg.SuperClass.pC) null;     // ok
231      Object o2 = (pkg.SuperClass.spC) null;    // ok
232
233      Object o3 = (pkg.SuperClass.pI) null;     // ok
234      Object o4 = (pkg.SuperClass.spI) null;    // ok
235
236      class C1 extends pkg.SuperClass.pC {}     // ok
237      class C2 extends pkg.SuperClass.spC {}    // ok
238
239      //interface I1 extends pkg.SuperClass.pI {}
240      //interface I2 extends pkg.SuperClass.spI {}
241
242    }
243
244  }
245
246}
247