langtools/src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Resolve.java
changeset 43866 3195ea126044
parent 43865 532c50fea155
child 44230 6f46f350a21b
child 44451 1619c00af9df
equal deleted inserted replaced
43865:532c50fea155 43866:3195ea126044
  2102         //Provide better diagnostic in such cases by looking for the class in any module:
  2102         //Provide better diagnostic in such cases by looking for the class in any module:
  2103         Iterable<? extends S> candidates = get.apply(name);
  2103         Iterable<? extends S> candidates = get.apply(name);
  2104 
  2104 
  2105         for (S sym : candidates) {
  2105         for (S sym : candidates) {
  2106             if (validate.test(sym))
  2106             if (validate.test(sym))
  2107                 return new InvisibleSymbolError(env, suppressError, sym);
  2107                 return createInvisibleSymbolError(env, suppressError, sym);
  2108         }
  2108         }
  2109 
  2109 
  2110         Set<ModuleSymbol> recoverableModules = new HashSet<>(syms.getAllModules());
  2110         Set<ModuleSymbol> recoverableModules = new HashSet<>(syms.getAllModules());
  2111 
  2111 
  2112         recoverableModules.remove(env.toplevel.modle);
  2112         recoverableModules.remove(env.toplevel.modle);
  2121 
  2121 
  2122                 if (ms.kind != ERR) {
  2122                 if (ms.kind != ERR) {
  2123                     S sym = load.apply(ms, name);
  2123                     S sym = load.apply(ms, name);
  2124 
  2124 
  2125                     if (sym != null && validate.test(sym)) {
  2125                     if (sym != null && validate.test(sym)) {
  2126                         return new InvisibleSymbolError(env, suppressError, sym);
  2126                         return createInvisibleSymbolError(env, suppressError, sym);
  2127                     }
  2127                     }
  2128                 }
  2128                 }
  2129             }
  2129             }
  2130         }
  2130         }
  2131 
  2131 
  2132         return defaultResult;
  2132         return defaultResult;
       
  2133     }
       
  2134 
       
  2135     private Symbol createInvisibleSymbolError(Env<AttrContext> env, boolean suppressError, Symbol sym) {
       
  2136         if (symbolPackageVisible(env, sym)) {
       
  2137             return new AccessError(env, null, sym);
       
  2138         } else {
       
  2139             return new InvisibleSymbolError(env, suppressError, sym);
       
  2140         }
       
  2141     }
       
  2142 
       
  2143     private boolean symbolPackageVisible(Env<AttrContext> env, Symbol sym) {
       
  2144         ModuleSymbol envMod = env.toplevel.modle;
       
  2145         PackageSymbol symPack = sym.packge();
       
  2146         return envMod == symPack.modle ||
       
  2147                envMod.visiblePackages.containsKey(symPack.fullname);
  2133     }
  2148     }
  2134 
  2149 
  2135     /**
  2150     /**
  2136      * Find a type declared in a scope (not inherited).  Return null
  2151      * Find a type declared in a scope (not inherited).  Return null
  2137      * if none is found.
  2152      * if none is found.
  4102                 if (sym.owner.kind == PCK) {
  4117                 if (sym.owner.kind == PCK) {
  4103                     return diags.create(dkind, log.currentSource(),
  4118                     return diags.create(dkind, log.currentSource(),
  4104                             pos, "not.def.access.package.cant.access",
  4119                             pos, "not.def.access.package.cant.access",
  4105                         sym, sym.location(), inaccessiblePackageReason(env, sym.packge()));
  4120                         sym, sym.location(), inaccessiblePackageReason(env, sym.packge()));
  4106                 } else if (   sym.packge() != syms.rootPackage
  4121                 } else if (   sym.packge() != syms.rootPackage
  4107                            && sym.packge().modle != env.toplevel.modle
  4122                            && !symbolPackageVisible(env, sym)) {
  4108                            && !isAccessible(env, sym.outermostClass())) {
       
  4109                     return diags.create(dkind, log.currentSource(),
  4123                     return diags.create(dkind, log.currentSource(),
  4110                             pos, "not.def.access.class.intf.cant.access.reason",
  4124                             pos, "not.def.access.class.intf.cant.access.reason",
  4111                             sym, sym.location(), sym.location().packge(),
  4125                             sym, sym.location(), sym.location().packge(),
  4112                             inaccessiblePackageReason(env, sym.packge()));
  4126                             inaccessiblePackageReason(env, sym.packge()));
  4113                 } else {
  4127                 } else {