langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
changeset 32951 a098b538296c
parent 32949 7e0f345e64a8
child 33019 2dc64d1f5e18
equal deleted inserted replaced
32950:22315d47485b 32951:a098b538296c
   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                  ||