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 { |