equal
deleted
inserted
replaced
288 public boolean isAccessible(Env<AttrContext> env, TypeSymbol c) { |
288 public boolean isAccessible(Env<AttrContext> env, TypeSymbol c) { |
289 return isAccessible(env, c, false); |
289 return isAccessible(env, c, false); |
290 } |
290 } |
291 |
291 |
292 public boolean isAccessible(Env<AttrContext> env, TypeSymbol c, boolean checkInner) { |
292 public boolean isAccessible(Env<AttrContext> env, TypeSymbol c, boolean checkInner) { |
|
293 |
|
294 /* 15.9.5.1: Note that it is possible for the signature of the anonymous constructor |
|
295 to refer to an inaccessible type |
|
296 */ |
|
297 if (env.enclMethod != null && (env.enclMethod.mods.flags & ANONCONSTR) != 0) |
|
298 return true; |
|
299 |
293 boolean isAccessible = false; |
300 boolean isAccessible = false; |
294 switch ((short)(c.flags() & AccessFlags)) { |
301 switch ((short)(c.flags() & AccessFlags)) { |
295 case PRIVATE: |
302 case PRIVATE: |
296 isAccessible = |
303 isAccessible = |
297 env.enclClass.sym.outermostClass() == |
304 env.enclClass.sym.outermostClass() == |
299 break; |
306 break; |
300 case 0: |
307 case 0: |
301 isAccessible = |
308 isAccessible = |
302 env.toplevel.packge == c.owner // fast special case |
309 env.toplevel.packge == c.owner // fast special case |
303 || |
310 || |
304 env.toplevel.packge == c.packge() |
311 env.toplevel.packge == c.packge(); |
305 || |
|
306 // Hack: this case is added since synthesized default constructors |
|
307 // of anonymous classes should be allowed to access |
|
308 // classes which would be inaccessible otherwise. |
|
309 env.enclMethod != null && |
|
310 (env.enclMethod.mods.flags & ANONCONSTR) != 0; |
|
311 break; |
312 break; |
312 default: // error recovery |
313 default: // error recovery |
313 case PUBLIC: |
314 case PUBLIC: |
314 isAccessible = true; |
315 isAccessible = true; |
315 break; |
316 break; |
359 public boolean isAccessible(Env<AttrContext> env, Type site, Symbol sym) { |
360 public boolean isAccessible(Env<AttrContext> env, Type site, Symbol sym) { |
360 return isAccessible(env, site, sym, false); |
361 return isAccessible(env, site, sym, false); |
361 } |
362 } |
362 public boolean isAccessible(Env<AttrContext> env, Type site, Symbol sym, boolean checkInner) { |
363 public boolean isAccessible(Env<AttrContext> env, Type site, Symbol sym, boolean checkInner) { |
363 if (sym.name == names.init && sym.owner != site.tsym) return false; |
364 if (sym.name == names.init && sym.owner != site.tsym) return false; |
|
365 |
|
366 /* 15.9.5.1: Note that it is possible for the signature of the anonymous constructor |
|
367 to refer to an inaccessible type |
|
368 */ |
|
369 if (env.enclMethod != null && (env.enclMethod.mods.flags & ANONCONSTR) != 0) |
|
370 return true; |
|
371 |
364 switch ((short)(sym.flags() & AccessFlags)) { |
372 switch ((short)(sym.flags() & AccessFlags)) { |
365 case PRIVATE: |
373 case PRIVATE: |
366 return |
374 return |
367 (env.enclClass.sym == sym.owner // fast special case |
375 (env.enclClass.sym == sym.owner // fast special case |
368 || |
376 || |