/** * Is class accessible in given environment? */ @VisibleForTesting static boolean isAccessible(Env env, JavaSymbol.TypeJavaSymbol c) { final boolean result; switch (c.flags() & Flags.ACCESS_FLAGS) { case Flags.PRIVATE: result = sameOutermostClass(env.enclosingClass, c.owner()); break; case 0: result = env.packge == c.packge(); break; case Flags.PUBLIC: result = true; break; case Flags.PROTECTED: result = env.packge == c.packge() || isInnerSubClass(env.enclosingClass, c.owner()); break; default: throw new IllegalStateException(); } // TODO check accessibility of enclosing type: isAccessible(env, c.type.getEnclosingType()) return result; }
/** * Is class accessible in given environment? */ @VisibleForTesting static boolean isAccessible(Env env, JavaSymbol.TypeJavaSymbol c) { final boolean result; switch (c.flags() & Flags.ACCESS_FLAGS) { case Flags.PRIVATE: result = sameOutermostClass(env.enclosingClass, c.owner()); break; case 0: result = env.packge == c.packge(); break; case Flags.PUBLIC: result = true; break; case Flags.PROTECTED: result = env.packge == c.packge() || isInnerSubClass(env.enclosingClass, c.owner()); break; default: throw new IllegalStateException(); } // TODO check accessibility of enclosing type: isAccessible(env, c.type.getEnclosingType()) return result; }
/** * Is class accessible in given environment? */ @VisibleForTesting static boolean isAccessible(Env env, JavaSymbol.TypeJavaSymbol c) { final boolean result; switch (c.flags() & Flags.ACCESS_FLAGS) { case Flags.PRIVATE: result = sameOutermostClass(env.enclosingClass, c.owner()); break; case 0: result = env.packge == c.packge(); break; case Flags.PUBLIC: result = true; break; case Flags.PROTECTED: result = env.packge == c.packge() || isInnerSubClass(env.enclosingClass, c.owner()); break; default: throw new IllegalStateException(); } // TODO check accessibility of enclosing type: isAccessible(env, c.type.getEnclosingType()) return result; }
/** * Is class accessible in given environment? */ @VisibleForTesting boolean isAccessible(Env env, JavaSymbol.TypeJavaSymbol c) { final boolean result; switch (c.flags() & Flags.ACCESS_FLAGS) { case Flags.PRIVATE: result = (env.enclosingClass().outermostClass() == c.owner().outermostClass()); break; case 0: result = (env.packge() == c.packge()); break; case Flags.PUBLIC: result = true; break; case Flags.PROTECTED: result = (env.packge() == c.packge()) || isInnerSubClass(env.enclosingClass(), c.owner()); break; default: throw new IllegalStateException(); } // TODO check accessibility of enclosing type: isAccessible(env, c.type.getEnclosingType()) return result; }