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