ProtectedMemberAccess4.java revision 3643:589ff4d43428
138494Sobrien/*
2174297Sobrien * @test  /nodynamiccopyright/
338494Sobrien * @bug 4319507 4785453
438494Sobrien * @summary Verify correct implementation of JLS2e 6.6.2.1
538494Sobrien * @author maddox
638494Sobrien *
738494Sobrien * @compile/fail/ref=ProtectedMemberAccess4.out --diags:formatterOptions=-simpleNames;layout=%b:%l:%_%m ProtectedMemberAccess4.java
838494Sobrien */
938494Sobrien
1038494Sobrien// 33 errors expected.
1138494Sobrien
1238494Sobrienimport pkg.SuperClass;
1338494Sobrien
1438494Sobrienclass ProtectedMemberAccess4 extends pkg.SuperClass {
1538494Sobrien
1638494Sobrien  // Access to a protected instance (non-static) field, instance method,
1738494Sobrien  // or member type by a qualified name is always legal in a subclass of
1838494Sobrien  // the class in which the member is declared.  Such access to a protected
1938494Sobrien  // instance field or instance method is allowed only if the qualifying type
2038494Sobrien  // or the type of the qualifying expression is (a subclass of) the class
2138494Sobrien  // in which the reference occurs.  In this test case, the qualifying type
2238494Sobrien  // is a superclass, thus all of the qualified references to instance fields
2338494Sobrien  // and instance methods are illegal.
2438494Sobrien
2538494Sobrien  pkg.SuperClass x = new pkg.SuperClass();
2638494Sobrien
2738494Sobrien  static pkg.SuperClass sx = new pkg.SuperClass();
2838494Sobrien
2938494Sobrien  int i = x.pi;                                 // illegal
3038494Sobrien  int j = x.spi;                                // ok
3138494Sobrien
3238494Sobrien  int n = sx.pi;                                // illegal
3338494Sobrien  int m = sx.spi;                               // ok
3438494Sobrien
3538494Sobrien  static int sn = sx.pi;                        // illegal
3638494Sobrien  static int sm = sx.spi;                       // ok
3738494Sobrien
3838494Sobrien  int w = x.pm();                               // illegal
3938494Sobrien  int y = x.spm();                              // ok
4038494Sobrien
41174297Sobrien  int u = sx.pm();                              // illegal
4251300Sobrien  int v = sx.spm();                             // ok
4338494Sobrien
44296194Strasz  pkg.SuperClass.pC  obj1;                      // ok
4539087Sobrien  pkg.SuperClass.spC obj2;                      // ok
4639087Sobrien
4739087Sobrien  pkg.SuperClass.pI  obj3;                      // ok
4839087Sobrien  pkg.SuperClass.spI obj4;                      // ok
4939087Sobrien
5039087Sobrien  Object o1 = (pkg.SuperClass.pC) null;         // ok
51174416Sru  Object o2 = (pkg.SuperClass.spC) null;        // ok
52174415Sru
5339087Sobrien  Object o3 = (pkg.SuperClass.pI) null;         // ok
5439087Sobrien  Object o4 = (pkg.SuperClass.spI) null;        // ok
5539087Sobrien
5639087Sobrien  class C1 extends pkg.SuperClass.pC {}         // ok
5739087Sobrien  class C2 extends pkg.SuperClass.spC {}        // ok
58174415Sru
5939087Sobrien  interface I1 extends pkg.SuperClass.pI {}     // ok
60296194Strasz  interface I2 extends pkg.SuperClass.spI {}    // ok
61296194Strasz
62296194Strasz  static {
63296194Strasz
64296194Strasz    pkg.SuperClass lx = new pkg.SuperClass();
65296194Strasz
66296194Strasz    sx.pi  = 1;                                 // illegal
67174415Sru    sx.spi = 2;                                 // ok
68174415Sru
69174415Sru    lx.pi  = 1;                                 // illegal
7039087Sobrien    lx.spi = 2;                                 // ok
7139087Sobrien
7238494Sobrien    int n = sx.pi;                              // illegal
7338494Sobrien    int m = sx.spi;                             // ok
7439087Sobrien
7539087Sobrien    int k = lx.pi;                              // illegal
76174415Sru    int l = lx.spi;                             // ok
77174415Sru
78174415Sru    int u = sx.pm();                            // illegal
79174415Sru    int v = sx.spm();                           // ok
8039087Sobrien
8138494Sobrien    int w = lx.pm();                            // illegal
8239087Sobrien    int z = lx.spm();                           // ok
83174415Sru
84174415Sru    pkg.SuperClass.pC  obj1;                    // ok
85174415Sru    pkg.SuperClass.spC obj2;                    // ok
86174415Sru
8739087Sobrien    pkg.SuperClass.pI  obj3;                    // ok
88174415Sru    pkg.SuperClass.spI obj4;                    // ok
8939087Sobrien
90174415Sru    Object o1 = (pkg.SuperClass.pC) null;       // ok
9139087Sobrien    Object o2 = (pkg.SuperClass.spC) null;      // ok
92174415Sru
93147439Sru    Object o3 = (pkg.SuperClass.pI) null;       // ok
94174415Sru    Object o4 = (pkg.SuperClass.spI) null;      // ok
95174415Sru
9639087Sobrien    //class C1 extends pkg.SuperClass.pC {}
97174415Sru    class C2 extends pkg.SuperClass.spC {}      // ok
98174415Sru
9939087Sobrien    //interface I1 extends pkg.SuperClass.pI {}
100174415Sru    //interface I2 extends pkg.SuperClass.spI {}
101174415Sru
102174415Sru  }
10339087Sobrien
104147439Sru  void m() {
105174415Sru
106174415Sru    pkg.SuperClass lx = new pkg.SuperClass();
107174415Sru
108147439Sru    x.pi  = 1;                                  // illegal
109147439Sru    x.spi = 2;                                  // ok
11039087Sobrien
111174415Sru    sx.pi  = 1;                                 // illegal
112174415Sru    sx.spi = 2;                                 // ok
113174415Sru
11439087Sobrien    lx.pi  = 1;                                 // illegal
115174415Sru    lx.spi = 2;                                 // ok
116174415Sru
117174415Sru    int t = x.pm();                             // illegal
11839087Sobrien    int y = x.spm();                            // ok
11939087Sobrien
120174415Sru    int u = sx.pm();                            // illegal
121174415Sru    int v = sx.spm();                           // ok
122174415Sru
123174415Sru    int w = lx.pm();                            // illegal
124174415Sru    int z = lx.spm();                           // ok
125174415Sru
126174415Sru    int i = x.pi;                               // illegal
12739087Sobrien    int j = x.spi;                              // ok
12838494Sobrien
12939087Sobrien    int n = sx.pi;                              // illegal
130174415Sru    int m = sx.spi;                             // ok
13139087Sobrien
132174415Sru    int k = lx.pi;                              // illegal
133174415Sru    int l = lx.spi;                             // ok
134174415Sru
135174415Sru    pkg.SuperClass.pC  obj1;                    // ok
136174415Sru    pkg.SuperClass.spC obj2;                    // ok
137174415Sru
138174415Sru    pkg.SuperClass.pI  obj3;                    // ok
139174415Sru    pkg.SuperClass.spI obj4;                    // ok
14038494Sobrien
14139087Sobrien    Object o1 = (pkg.SuperClass.pC) null;       // ok
142174415Sru    Object o2 = (pkg.SuperClass.spC) null;      // ok
143174415Sru
144174415Sru    Object o3 = (pkg.SuperClass.pI) null;       // ok
145174415Sru    Object o4 = (pkg.SuperClass.spI) null;      // ok
146174415Sru
14738494Sobrien    class C1 extends pkg.SuperClass.pC {}       // ok
148174415Sru    class C2 extends pkg.SuperClass.spC {}      // ok
149174415Sru
150174415Sru    //interface I1 extends pkg.SuperClass.pI {}
151174415Sru    //interface I2 extends pkg.SuperClass.spI {}
152174415Sru
153174415Sru  }
154174415Sru
155174415Sru  class Inner {
156174415Sru
15739087Sobrien    int i = x.pi;                               // illegal
158147439Sru    int j = x.spi;                              // ok
15939087Sobrien
16038494Sobrien    int n = sx.pi;                              // illegal
161169497Spav    int m = sx.spi;                             // ok
162147439Sru
16339087Sobrien    //static int sn = sx.pi;
16438494Sobrien    //static int sm = sx.spi;
165174415Sru
166174415Sru    int w = x.pm();                             // illegal
16739087Sobrien    int y = x.spm();                            // ok
168147439Sru
169174415Sru    int u = sx.pm();                            // illegal
170174415Sru    int v = sx.spm();                           // ok
171174415Sru
172147439Sru    pkg.SuperClass.pC  obj1;                    // ok
173147439Sru    pkg.SuperClass.spC obj2;                    // ok
174174415Sru
175174415Sru    pkg.SuperClass.pI  obj3;                    // ok
176174415Sru    pkg.SuperClass.spI obj4;                    // ok
177174415Sru
178174415Sru    Object o1 = (pkg.SuperClass.pC) null;       // ok
179147439Sru    Object o2 = (pkg.SuperClass.spC) null;      // ok
180174415Sru
181147439Sru    Object o3 = (pkg.SuperClass.pI) null;       // ok
182174415Sru    Object o4 = (pkg.SuperClass.spI) null;      // ok
18339087Sobrien
18439087Sobrien    class C1 extends pkg.SuperClass.pC {}       // ok
185174415Sru    class C2 extends pkg.SuperClass.spC {}      // ok
18639087Sobrien
18739087Sobrien    //interface I1 extends pkg.SuperClass.pI {}
18838494Sobrien    //interface I2 extends pkg.SuperClass.spI {}
189174415Sru
190147439Sru    // Not allowed in inner classes.
191147439Sru    // static { ... }
192174415Sru
193174415Sru    void m() {
19439087Sobrien
195147439Sru      pkg.SuperClass lx = new pkg.SuperClass();
196174415Sru
197147439Sru      x.pi  = 1;                                // illegal
19839087Sobrien      x.spi = 2;                                // ok
199174415Sru
200174415Sru      sx.pi  = 1;                               // illegal
20139087Sobrien      sx.spi = 2;                               // ok
20239087Sobrien
203174415Sru      lx.pi  = 1;                               // illegal
20439087Sobrien      lx.spi = 2;                               // ok
20539087Sobrien
20638494Sobrien      int t = x.pm();                           // illegal
20739087Sobrien      int y = x.spm();                          // ok
20839087Sobrien
209174415Sru      int u = sx.pm();                          // illegal
210174415Sru      int v = sx.spm();                         // ok
211174415Sru
21238494Sobrien      int w = lx.pm();                          // illegal
21339087Sobrien      int z = lx.spm();                         // ok
21438494Sobrien
21539087Sobrien      int i = x.pi;                             // illegal
216174415Sru      int j = x.spi;                            // ok
21739087Sobrien
218174297Sobrien      int n = sx.pi;                            // illegal
219174297Sobrien      int m = sx.spi;                           // ok
220174415Sru
221174297Sobrien      int k = lx.pi;                            // illegal
222174415Sru      int l = lx.spi;                           // ok
223174297Sobrien
224174415Sru      pkg.SuperClass.pC  obj1;                  // ok
225174297Sobrien      pkg.SuperClass.spC obj2;                  // ok
226174415Sru
227174297Sobrien      pkg.SuperClass.pI  obj3;                  // ok
228174415Sru      pkg.SuperClass.spI obj4;                  // ok
229174297Sobrien
230174297Sobrien      Object o1 = (pkg.SuperClass.pC) null;     // ok
231174415Sru      Object o2 = (pkg.SuperClass.spC) null;    // ok
232174415Sru
233174297Sobrien      Object o3 = (pkg.SuperClass.pI) null;     // ok
234174297Sobrien      Object o4 = (pkg.SuperClass.spI) null;    // ok
235174297Sobrien
236174297Sobrien      class C1 extends pkg.SuperClass.pC {}     // ok
237174297Sobrien      class C2 extends pkg.SuperClass.spC {}    // ok
238174415Sru
239174297Sobrien      //interface I1 extends pkg.SuperClass.pI {}
240174297Sobrien      //interface I2 extends pkg.SuperClass.spI {}
241174297Sobrien
242174415Sru    }
243174415Sru
244174297Sobrien  }
245174297Sobrien
246174415Sru}
247174415Sru